Spring 数据脱敏实现方式

1、前言

     当前互联网中,越来越重视数据安全,数据脱敏在实际应用中越来越多。

2 、脱敏方式

  2.1 数据库sql 语句脱敏

    sql 语句脱敏是比较传统通用的,例子如下所示:

select CONCAT(LETF(mobile,3),"*****",RIGHT(mobile,3))  from tb_user

2.2 通过Java 代码脱敏

    代码脱敏一般要通过aop以及自定义注解实现,代码如下。

package com.example.demo.annotion;import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DesensitizationWord {}
package com.example.demo.annotion;import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DesensitizationWord {}
@Aspect
@Component
@Slf4j
public class DesensitizationgWordAspect {@Pointcut(value = "@annotation(com.example.demo.annotion.DesensitizationWord)")public void desensitizationgWordFlag() {}@AfterReturning(value = "desensitizationgWordFlag()",returning = "result")public void afterReturning(JoinPoint joinPoint, Object result) throws IllegalAccessException {if(result instanceof Base){Base base  = (Base)result;List<?> list = base.getData();if(CollectionUtils.isEmpty(list)) return;for(Object objcet:list){Field[]  fields = objcet.getClass().getDeclaredFields();for(Field field:fields){Annotation[]  annotations = field.getAnnotations();if(annotations!=null && annotations.length>0){for (Annotation annotation:annotations ){field.setAccessible(true);if(annotation instanceof Mobile){Object  mobile = field.get(objcet);if(mobile instanceof String){String mobileString= (String)mobile;field.set(objcet,desensitizedPhoneNumber(mobileString));}}}}}}}}public  String desensitizedPhoneNumber(String phoneNumber) {if (StringUtils.isNotBlank(phoneNumber)) {phoneNumber = phoneNumber.replaceAll("(\\w{3})\\w*(\\w{3})", "$1*****$2");}return phoneNumber;}
}

2.3 、通过mybatis-mate-sensitive-jackson 

    这个是mybaitsplus  的功能,其实实现的原理和2.2的的方法类型,只是它封装成jar包,并且支持扩展。 怎么使用大家可以参考企业高级特性 | MyBatis-Plus,它目前支持如下脱敏规则如

package mybatis.mate.strategy;public interface SensitiveType {String chineseName = "chineseName";String idCard = "idCard";String phone = "phone";String mobile = "mobile";String address = "address";String email = "email";String bankCard = "bankCard";String password = "password";String carNumber = "carNumber";
}

还可以自定义脱敏规则,如下代码

@Configuration
public class SensitiveStrategyConfig {/*** 注入脱敏策略*/@Beanpublic ISensitiveStrategy sensitiveStrategy() {// 自定义 testStrategy 类型脱敏处理return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js-包

包的概念 包&#xff1a;将模块&#xff0c;代码&#xff0c;其他资料聚合成的一个文件夹 包分类&#xff1a; 1.项目包&#xff1a;主要用于编写项目和业务逻辑的文件夹 2.软件包&#xff1a;封装工具和方法供开发者使用&#xff08;一般使用npm管理&#xff09; 1&#…

证明:每次循环执行i = (i-1)s可以枚举s表示集合的所有子集i

状态压缩&#xff1a;使用二进制数表示一个集合的情况&#xff0c;第i位为1表示第i元素在集合中&#xff0c;为0表示不在集合中。 已知i表示的集合是s表示的集合的子集&#xff0c;枚举s的所有子集i可以写为 for(int i s; i ! 0; i (i-1)&s){}证明&#xff1a;每次循环执…

SpringBoot之JdbcTemplate输出完整SQL日志

applicatio.yml开启日志功能 jdbc-log:# 开启完整SQL日志输出功能enabled: truelogging:level:# 切面类路径&#xff0c;日志级别为DEBUG&#xff0c;因为SpringBoot默认日志级别为INFOcom.xxx.xxx.JdbcTemplateAspect: DEBUG日志切面 import lombok.extern.slf4j.Slf4j; imp…

mysql的DDL语言和DML语言

DDL语言&#xff1a; 操作数据库&#xff0c;表等&#xff08;创建&#xff0c;删除&#xff0c;修改&#xff09;&#xff1b; 操作数据库 1&#xff1a;查询 show databases 2:创建 创建数据库 create database 数据库名称 创建数据库&#xff0c;如果不存在就创建 crea…

造成并发安全的三大源头:可见性、原子性、有序性

缓存导致的可见性问题 一个线程对共享变量的修改&#xff0c;另外一个线程能够立刻看到&#xff0c;我们称为 可见性 如果是单核cpu&#xff0c;cpu之间的线程共享一个缓存&#xff0c;这个时候不会出现缓存与内存数据一致性的问题&#xff0c;同样的线程之间具备可见性 如果…

MySQL—一条查询SQL语句的完整执行流程

MySQL—一条查询SQL语句的完整执行流程 表结构和数据如下&#xff1a; 我们分析的sql语句如下&#xff1a; select tb_id,tb_name,tb_address from tb_user where tb_id 66;大体来说&#xff0c;MySQL可以分为Server层和存储引擎层两部分: Server层 包括:连接器、查询缓存、…

使用Java实现动态心形图案

一、引言 在计算机图形学中&#xff0c;动态图案的生成和显示一直是一个令人兴奋的话题。心形图案作为情感表达的一种常见方式&#xff0c;在编程领域也颇受欢迎。本文将介绍如何使用Java编程语言实现动态心形图案&#xff0c;并附上相应的代码片段。 二、心形曲线的数学表达…

如何使用 ArcGIS Pro 快速为黑白地图配色

对于某些拍摄时间比较久远的地图&#xff0c;限于当时的技术水平只有黑白的地图&#xff0c;针对这种情况&#xff0c;我们可以通过现在的地图为该地图进行配色&#xff0c;这里为大家讲解一下操作方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微…

dubbo3-01.helloworld

项目结构 - dubbo-examples- consumer-service- provider-interface- provider-servicepom 文件 dubbo-examples 的 pom.xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <arti…

使用大卫的k8s监控面板(k8s+prometheus+grafana)

问题 书接上回&#xff0c;对EKS&#xff08;AWS云k8s&#xff09;启用AMP&#xff08;AWS云Prometheus&#xff09;监控AMG(AWS云 grafana)&#xff0c;上次我们只是配通了EKSAMPAMG的监控路径。这次使用一位大卫老师的grafana的面板&#xff0c;具体地址如下&#xff1a; ht…

Cargo 使用教程

什么是 Cargo&#xff1f; Cargo 是 Rust 的构建系统和包管理器&#xff0c;它提供了创建项目、编译代码、管理依赖和发布包等功能。使用 Cargo&#xff0c;你可以轻松地构建 Rust 程序&#xff0c;而不必深入了解底层的构建细节。 安装 Cargo 在开始之前&#xff0c;确保你…

汽车IVI中控开发入门及进阶(十五):AUTOSAR

前言: 随着汽车四化的进行,汽车电子系统standard标准化和coperation互操作性变得重要, AUTOSAR(AUTomotive Open System Architecture 汽车开放系统架构)框架已成为汽车行业的基础支柱。 AUTOSAR始自2000年,当时认识到标准化是有必要

Redis入门到通关之Redis数据结构-Set篇

文章目录 ☃️概述☃️数据结构☃️源码☃️其他 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a; 我是请回答1024&#xff0c;一名Java领域深耕多年…

深入了解 Spring Boot 的加载过程

Spring Boot 的加载过程可以大致分为以下几个阶段&#xff1a; 类加载&#xff1a;首先&#xff0c;Java 虚拟机会加载必要的类&#xff0c;包括 Spring Boot 的核心类和应用程序的相关类。配置解析&#xff1a;Spring Boot 会解析各种配置&#xff0c;如 application.properti…

解读币安Megadrop:如何参加第一期BounceBit活动?

币安推出新的代币发行平台 Megadrop&#xff0c;第一期为 BounceBit。 跟 launchpool 相比&#xff0c; 主要不同是 1&#xff09;锁仓 bnb 有收益的倍数加成 2&#xff09;做任务有收益加成。 我认为核心目的有两个&#xff1a; 1&#xff09;更多收益给 BNB 长期持有者&am…

数仓建模—数据模型

数仓建模—数据模型 前面我们讲了什么是数据仓库,以及数据仓库的发展历史,从这里开始我们讲解数仓建模,在开始之前我们先了解一下什么是数据模型,以及常见的数据模型都有哪些 什么是数据模型 在详细探讨数据模型之前,我们需要明确什么是数据。从本质上讲,数据由收集、…

【运维】docker-compose部署mysql5.7、mysql 8,单节点,双主

一、docker-composemysql 5.7 单机版mysql 5.7 ## docker-compose config ## 检查当前目录docker-compose.yml文件配置是否正确 ## docker-compose up -d ## -d 为后台启动 ## docker-compose up -d --force-rereate ## 强制重新创建容器…

axios 实现上传、下载

一、下载&#xff08;支持批量下载&#xff09; const downloadFile (fileList) > {console.log(fileList, 下载list)fileList.forEach((e) > {const uid uuidv4()const CancelToken axios.CancelTokenlet source CancelToken.source()transmissionStore().setDownlo…

Django中实现JWT(构成原理、base64)

Django中实现JWT(构成原理、base64) 目录 Django中实现JWT(构成原理、base64)简介JWT的构成原理base64的使用手动验证token 简介 JWT (JSON Web Token)通常用于对用户进行身份验证和授权&#xff0c;是一种无状态的认证机制&#xff0c;通过在用户和服务器之间传递加密的令牌来…

jenkins修改全局安全配置之后登录错误

教训&#xff08;流泪&#xff09; 事情是这样的&#xff0c;第一次我需要用单点登录集成jenkins&#xff0c;jenkins可以通过插件的方式支持cas协议&#xff0c;我当时也不很懂&#xff0c;经过我学网上的一顿乱配置&#xff0c;jenkis上不去了&#xff0c;虽然这是公司本地环…