在展示用户信息时,为保护用户隐私,部分数据需要进行部分隐藏(又叫数据脱敏)

一、数据脱敏是什么?

数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。🔐

在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用。

🔑🔑🔑🔑如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。🔑🔑🔑

二、脱敏前的准备

  1. 技术背景

该文章中的数据脱敏是基于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 + '\'' +
                '}';
    }
}

三、编写接口来进行测试

  1. 注解解释
  • @RestController //该类中所有的API接口返回的数据,不管你对应的方法返回值为Map或是其他Object类型,它都会以Json字符串的形式返回给客户端

  • 🚨@Desensitization //实体类准备好的前提下,需要调用到该实体类的地方,在其方法的前面进行注释,使实体类中的脱敏技术得以发挥作用

  • @RequestMapping( ) //一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。括号内用来写访问的地址请求路径-->>e.g: "/information" ,启动项目之后通过localhost:8080/information即可访问到内容

  1. 代码展示
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访问效果如下:



📍小编在这里祝大家节日快乐啦~~~~~💖💖💖💖💖💖💖💖💖

📚有什么问题欢迎大家指正!!!!

🙏🙏🙏谢谢大家的观看,一起进步吧!!!🙏🙏🙏🙏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值