SpringBoot自定义处理器实现数据脱敏

  • 定义一个实体类
java 复制代码
@Data
public class UserModel {

    private Integer id;

    private String userName;

    private String idCard;

}
  • 定义一个控制器
javascript 复制代码
@RestController
public class TestController {

    @GetMapping("getUser")
    public UserModel getUser(){
        UserModel userModel = new UserModel();
        userModel.setId(1);
        userModel.setUserName("林青霞");
        userModel.setIdCard("3856597623");
        return userModel;
    }

}

控制器返回一个User对象,但是想对User对象的idCard属性值做脱敏处理,字符串后四位用*代替。

这里可以考虑使用Jackson自定义的序列化器实现,就类似于@DateFormat注解的实现效果。

  • 自定义一个属性序列化器
java 复制代码
public class IdCardDesensitizeHandler extends JsonSerializer  {

    @Override
    public String doDesensitize(String value) {
        if (value != null && value.length() > 4){
            //后四位替换为*
            value = value.substring(0,value.length() - 4) + "****";
        }
        return value;
    }

    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (o instanceof String){
            String value = (String) o;
            jsonGenerator.writeString(doDesensitize(value));
        }
    }
}

自定义序列化器,继承JsonSerializer,重写serialize方法

  • 标识对象属性自定义的序列化器,在idCard属性上标注 @JsonSerialize(using = IdCardDesensitizeHandler.class)
java 复制代码
@Data
public class UserModel {

    private Integer id;

    private String userName;

    @JsonSerialize(using = IdCardDesensitizeHandler.class)
    private String idCard;

}

SpringMVC在将对象转Json时用到了Jackson类库的ObjectMapper对象实现的,Jackson提供了自定义对象属性序列化器功能,当需要序列化idCard字段时,会自动调用注解指定的IdCardDesensitizeHandler序列化器完成实现。

一般在开发框架时都会提供各种场景的功能扩展点,例如SpringMVC自定义注解实现参数封装、自定义参数校验器,拦截器,Mybatis的statementhandler等,灵活使用这些扩展机制可以实现更强大的功能。

相关推荐
重生之后端学习11 分钟前
day08-Elasticsearch
后端·elasticsearch·spring cloud·中间件·全文检索·jenkins
东阳马生架构26 分钟前
订单初版—5.售后退货链路中的技术问题说明文档
java
小小寂寞的城31 分钟前
JAVA策略模式demo【设计模式系列】
java·设计模式·策略模式
志辉AI编程1 小时前
别人还在入门,你已经精通!Claude Code进阶必备14招
后端·ai编程
JAVA学习通1 小时前
图书管理系统(完结版)
java·开发语言
代码老y1 小时前
Spring Boot项目中大文件上传的高级实践与性能优化
spring boot·后端·性能优化
abigalexy1 小时前
深入Java锁机制
java
paishishaba1 小时前
处理Web请求路径参数
java·开发语言·后端
神仙别闹1 小时前
基于Java+MySQL实现(Web)可扩展的程序在线评测系统
java·前端·mysql
程序无bug1 小时前
Java中的8中基本数据类型转换
java·后端