数据脱敏
特别提醒
已经不推荐使用DataConvertUtil去实现脱敏+数据字典转换双重操作。如果有脱敏需求,则自行调用DesensitiseUtil处理。
章节简介
此章节介绍如何对敏感数据进行脱敏处理,保护用户隐私信息
功能简介
在实际业务需求中,有一些敏感数据,例如手机号、身份证号等需要进行脱敏处理后再展示。此需求在框架中可通过@Desensitise注解,主动调用工具类方法或配合AOP快捷实现。
配置方式
- 开发人员先在需要脱敏的实体类字段上加上
@Desensitise注解
@Data
public class UserInfoVO {
@ApiModelProperty("手机号码")
@Desensitise
private String phone;
@ApiModelProperty("身份证号")
@Desensitise
private String idCard;
}
- 执行脱敏
// 单对象脱敏
UserInfoVO single = new UserInfoVO();
DesensitiseUtil.desensitise(single);
// List 数据脱敏
List<UserInfoVO> list = new ArrayList<>();
DesensitiseUtil.desensitise(list);
// 基于AOP,使用注解脱敏。注意desensitise要标记为true
@DataConvert(desensitise = true)
UserInfoVO getUserInfo(@Param("id") Long id);
3高级用法@Desensitise注解提供了多种脱敏策略,例如手机号、身份证号等。
/**
* 脱敏方式,默认为自动选择脱敏方式
*/
String mode() default AUTO;
/**
* 脱敏开始位(包含)
*/
int startInclude() default 0;
/**
* 脱敏结束位(不包含)
*/
int endExclude() default 0;
/**
* 自定义转换器类,必须实现 DesensitiseConverter 接口
* 仅在 mode 为 CUSTOM 时生效
*/
Class<? extends DesensitiseConverter> converter() default DesensitiseConverter.class;
- 直接打注解,不加任何参数,则系统会自动判断字符串类型,执行脱敏
- MANUAL模式,则需要指定开始和结束位置,从startInclude到endExclude位置将被脱敏
- 可以指定脱敏模式,例如手机号、身份证号等,请参照
mode枚举值进行配置 - 当以上需求均不满足是,可以自定义转换器,实现
DesensitiseConverter接口,完善自定义逻辑。同时传入mode为CUSTOM,并指定自定义转换器 - 除
CUSTOM模式外,其他脱敏逻辑均基于Hutool实现,可参阅源码了解更多细节
