一个注解优雅的实现接口数据脱敏
大家好,我是不才陈某~
通常接口返回值中的一些敏感数据也是要脱敏的,比如身份证号、手机号码、地址.....通常的手段就是用*隐藏一部分数据,当然也可以根据自己需求定制。
言归正传,如何优雅的实现呢?有两种实现方案,如下:
整合Mybatis插件,在查询的时候针对特定的字段进行脱敏整合Jackson,在序列化阶段对特定字段进行脱敏基于Sharding Sphere实现数据脱敏
第一种方案网上很多实现方式,下面演示第二种,整合Jackson。
1. 自定义一个Jackson注解
需要自定义一个脱敏注解,一旦有属性被标注,则进行对应得脱敏,如下:
/**
* 自定义jackson注解,标注在属性上
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveJsonSerializer.class)
public @interface Sensitive {
//脱敏策略
SensitiveStrategy strategy();
}2. 定制脱敏策略
针对项目需求,定制不同字段的脱敏规则,比如手机号中间几位用*替代,如下:
/**
* 脱敏策略,枚举类,针对不同的数据定制特定的策略
*/
public enum SensitiveStrategy {
/**
* 用户名
*/
USERNAME(s -
THE END