基于Hutool-用户敏感信息脱敏展示

目录

1、引入依赖

2、定义序列化器

3、 敏感字段上添加自定义序列化器。

4、模拟测试用例

5、用例测试


信息脱敏工具:信息脱敏工具-DesensitizedUtil | Hutool

Hutool:Hutool

简介:在数据处理或清洗中,可能涉及到很多隐私信息的脱敏工作,因此Hutool针对常用的信息封装了一些脱敏方法。

现阶段支持的脱敏数据类型包括:

  • 用户id
  • 中文姓名
  • 身份证号
  • 座机号
  • 手机号
  • 地址
  • 电子邮件
  • 密码
  • 中国大陆车牌,包含普通车辆、新能源车辆
  • 银行卡

1、引入依赖
  • 依赖:hutool+springboot自带的Jackson序列化

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.26</version>
</dependency>

2、定义序列化器
  • 身份证序列化器
/**
 * 身份证号脱敏反序列化
 */
public class IdCardDesensitizationSerializer extends JsonSerializer<String> {

    @Override
    public void serialize(String idCard, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String phoneDesensitization = DesensitizedUtil.idCardNum(idCard, 4, 4);
        jsonGenerator.writeString(phoneDesensitization);
    }
}
  • 手机号序列化器 
/**
 * 手机号脱敏反序列化
 */
public class PhoneDesensitizationSerializer extends JsonSerializer<String> {
    @Override
    public void serialize(String phone, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String phoneDesensitization = DesensitizedUtil.mobilePhone(phone);
        jsonGenerator.writeString(phoneDesensitization);
    }
}

3、 敏感字段上添加自定义序列化器。
@Data
@Accessors(chain = true)
public class UserRespDTO {

    /**
     * 证件号码
     */
    @JsonSerialize(using = IdCardDesensitizationSerializer.class)
    private String idCard;

    /**
     * 手机号
     */
    @JsonSerialize(using = PhoneDesensitizationSerializer.class)
    private String phone;
}

4、模拟测试用例
  • 实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_user")
public class UserDO {
  
      // ID
    private Long id;
  
      // 用户名
    private String username;
  
      // 密码
    private String password;
  
      // 真实姓名
    private String realName;
  
      // 手机号
    private String phone;
  
      // 邮箱
    private String mail;
  
      // 注销时间戳
    private Long deletionTime;
  
      // 创建时间
      @TableField(fill = FieldFill.INSERT)
    private Date createTime;
  
      // 修改时间
      @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
  
      // 删除标识 0:未删除 1:已删除
      @TableField(fill = FieldFill.INSERT)
    private Integer delFlag;
  
}
  • 响应脱敏实体
@Data
public class UserDTO {
    // ID
    private Long id;

    // 用户名
    private String username;

    // 真实姓名
    private String realName;

    // 手机号
    @JsonSerialize(using = PhoneDesensitizationSerializer.class)
    private String phone;

    // 邮箱
    private String mail;

    // 删除标识 0:未删除 1:已删除
    private Integer delFlag;
}

  • Controller层
@RestController
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

     /**
     * 根据用户名查询用户脱敏信息
     */
    @GetMapping("/user/{username}")
    public Result<UserDTO> getUserByUsername(@PathVariable("username") String username){
        return Results.success(userService.getUserByUserName(username));
    }
}

  • Service层
public interface UserService extends IService<UserDO> {

    /**
     * 根据用户名查询用户信息
     * @param username
     * @return 返回用户信息实体
     */
    UserDTO getUserByUserName(String username);
}

  • ServiceImpl层
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserDO> implements UserService {
    /**
     * 通过用户名查询用户信息
     * @param username
     * @return
     */
    @Override
    public UserDTO getUserByUserName(String username) {
        LambdaQueryWrapper<UserDO> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserDO::getUsername,username);

        UserDO userDO = baseMapper.selectOne(wrapper);

        UserDTO userDTO = new UserDTO();
        BeanUtils.copyProperties(userDO,userDTO);
        return userDTO;
    }
}

5、用例测试
  • 发起测试请求

  • 可以看到手机号成功脱敏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值