一、数据脱敏是什么?
数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。🔐
在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用。
🔑🔑🔑🔑如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。🔑🔑🔑
二、脱敏前的准备
技术背景
该文章中的数据脱敏是基于Springboot框架中自带的脱敏技术
2.准备工作
2.1依赖包的导入
//创建maven工程,引入关键依赖(专程用来做数据脱敏的jar包)
<dependency>
<groupId>io.gitee.chemors</groupId>
<artifactId>secure-ext-spring-boot-starter</artifactId>
<version>1.0.3-RELEASE</version>
</dependency>
2.2对一些注解的认识
🚨@DesensitizationProp( ) //该注解适用于实体类中的某些属性需要进行脱敏的 默认类型说明如下:
SensitiveTypeEnum.CHINESE_NAME //中文名
SensitiveTypeEnum.ID_CARD // 身份证号
SensitiveTypeEnum.FIXED_PHONE // 电话
SensitiveTypeEnum.MOBILE_PHONE // 手机
SensitiveTypeEnum.ADDRESS //地址
SensitiveTypeEnum.EMAIL //邮箱
SensitiveTypeEnum.BANK_CARD //银行卡号
SensitiveTypeEnum.PASSWORD // 密码
SensitiveTypeEnum.CUSTOM //自定义 (配合 DesensitizationProp 中preLength和sufLength 进行个性化定义)
注意:注解作用在实体类的属性上面。实体类中的属性含义必须和注解中的默认类型保持一致!!!!
2.3准备实体类
自行准备一个实体类,参考如下:
本人是利用了idea中的插件Lombok中的注解进行操作的,如果没有相关插件,请参考方式二!!
方式一:
import com.mos.secure.ext.annotations.DesensitizationProp;
import com.mos.secure.ext.enums.SensitiveTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private Integer uid; //用户id
@DesensitizationProp(SensitiveTypeEnum.CHINESE_NAME)
private String userName; //用户名字
@DesensitizationProp(SensitiveTypeEnum.ID_CARD)
private String idCard; //用户身份证号
@DesensitizationProp(SensitiveTypeEnum.MOBILE_PHONE)
private String userTel; //用户手机号
@DesensitizationProp(SensitiveTypeEnum.EMAIL)
private String userEmail; //用户邮箱
@DesensitizationProp(SensitiveTypeEnum.BANK_CARD)
private String userBankCard; //用户银行卡号
}
方式二:
import com.mos.secure.ext.annotations.DesensitizationProp;
import com.mos.secure.ext.enums.SensitiveTypeEnum;
public class User {
private Integer uid; //用户id
@DesensitizationProp(SensitiveTypeEnum.CHINESE_NAME)
private String userName; //用户名字
@DesensitizationProp(SensitiveTypeEnum.ID_CARD)
private String idCard; //用户身份证号
@DesensitizationProp(SensitiveTypeEnum.MOBILE_PHONE)
private String userTel; //用户手机号
@DesensitizationProp(SensitiveTypeEnum.EMAIL)
private String userEmail; //用户邮箱
@DesensitizationProp(SensitiveTypeEnum.BANK_CARD)
private String userBankCard; //用户银行卡号
public User() {
}
public User(Integer uid, String userName, String idCard, String userTel, String userEmail, String userBankCard) {
this.uid = uid;
this.userName = userName;
this.idCard = idCard;
this.userTel = userTel;
this.userEmail = userEmail;
this.userBankCard = userBankCard;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getUserTel() {
return userTel;
}
public void setUserTel(String userTel) {
this.userTel = userTel;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public String getUserBankCard() {
return userBankCard;
}
public void setUserBankCard(String userBankCard) {
this.userBankCard = userBankCard;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", userName='" + userName + '\'' +
", idCard='" + idCard + '\'' +
", userTel='" + userTel + '\'' +
", userEmail='" + userEmail + '\'' +
", userBankCard='" + userBankCard + '\'' +
'}';
}
}
三、编写接口来进行测试
注解解释
@RestController //该类中所有的API接口返回的数据,不管你对应的方法返回值为Map或是其他Object类型,它都会以Json字符串的形式返回给客户端
🚨@Desensitization //实体类准备好的前提下,需要调用到该实体类的地方,在其方法的前面进行注释,使实体类中的脱敏技术得以发挥作用
@RequestMapping( ) //一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。括号内用来写访问的地址请求路径-->>e.g: "/information" ,启动项目之后通过localhost:8080/information即可访问到内容
代码展示
import com.mos.secure.ext.annotations.Desensitization;
import com.yhf.springboot.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserHandler {
@Desensitization
@RequestMapping("/information")
public User test(){
return new User(1,"张三","122222198820188888","13336558888","2568445232@qq.com","6448555621142365879");
}
}
四、效果展示
最终访问出来的结果如下图:
firefox浏览器访问效果如下:

Chrome访问效果如下:

📍小编在这里祝大家节日快乐啦~~~~~💖💖💖💖💖💖💖💖💖
📚有什么问题欢迎大家指正!!!!
🙏🙏🙏谢谢大家的观看,一起进步吧!!!🙏🙏🙏🙏