通常接口返回值中的一些敏感数据也是要脱敏的,比如身份证号、手机号码、地址.....通常的手段就是用*隐藏一部分数据,当然也可以根据自己需求定制。
言归正传,如何优雅的实现呢?有两种实现方案,如下:
- 整合Mybatis插件,在查询的时候针对特定的字段进行脱敏
- 整合Jackson,在序列化阶段对特定字段进行脱敏
- 基于Sharding Sphere实现数据脱敏
第一种方案网上很多实现方式,下面演示第二种,整合Jackson。
1. 自定义一个Jackson注解
需要自定义一个脱敏注解,一旦有属性被标注,则进行对应得脱敏,如下:
2. 定制脱敏策略
针对项目需求,定制不同字段的脱敏规则,比如手机号中间几位用*替代,如下:
以上只是提供了部分,具体根据自己项目要求进行配置。
3. 定制JSON序列化实现
下面将是重要实现,对标注注解@Sensitive的字段进行脱敏,实现如下:
4. 定义Person类,对其数据脱敏
使用注解@Sensitive注解进行数据脱敏,代码如下:
5. 模拟接口测试
以上4个步骤完成了数据脱敏的Jackson注解,下面写个controller进行测试,代码如下:
调用接口查看数据有没有正常脱敏,结果如下:
6. 总结
数据脱敏有很多种实现方式,关键是哪种更加适合,哪种更加优雅.....