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等,灵活使用这些扩展机制可以实现更强大的功能。

相关推荐
可乐ea4 分钟前
【知识获取与分享社区项目 | 项目日记第 19 天】基于 Elasticsearch 实现关键词检索与业务权重排序
java·大数据·spring boot·mysql·elasticsearch·搜索引擎·全文检索
金銀銅鐵27 分钟前
用 Tkinter 实现一个简单的罗马数字转化工具
后端·python
zzz_23681 小时前
【Spring】面试突击系列(一):IoC 与 DI 深度解析
java·spring·面试
于先生吖1 小时前
前后端分离体育服务项目,场馆计费+线下赛事排行小程序部署开发教程
java·小程序·uni-app
RemainderTime1 小时前
Spring Boot脚手架集成 Spring Security实现生产级RBAC鉴权
spring boot·后端·spring
闪电悠米1 小时前
黑马点评-秒杀优化-01_async_seckill_idea
java·数据库·ide·redis·分布式·缓存·intellij-idea
摇滚侠1 小时前
IDEA 创建 Java 项目 lib 和 resources
java·ide·intellij-idea
宸津-代码粉碎机1 小时前
Spring AI企业级Agent实战|多工具自动规划+并行调度落地,彻底解决复杂业务AI任务编排问题
java·大数据·人工智能·spring boot·python·spring
lixia0417mul21 小时前
flink接入spring体系
java·spring·flink
biubiubiu07061 小时前
自定义starter 可以导入SpringBoot直接使用
java·spring boot·spring