一个注解优雅的实现接口数据脱敏

大家好,我是不才陈某~

通常接口返回值中的一些敏感数据也是要脱敏的,比如身份证号、手机号码、地址.....通常的手段就是用*隐藏一部分数据,当然也可以根据自己需求定制。

言归正传,如何优雅的实现呢?有两种实现方案,如下:

整合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
Copyright © 2024 亿华云