业务脱敏
脱敏介绍: 很多数据在业务展示上需要添加上脱敏处理,部分人是不能查看敏感信息的,如电话号码脱敏: 17688990101,期望在前端展示的数据176***0101,名称脱敏:李大大,期望在前端展示的数据,李大。
一般实现: 在数据返回时添加if else判断是否是需要脱敏,是电话号码脱敏还是名称脱敏,返回数据需要做很多麻烦的操作,而且容易遗漏部分接口。
fastjson序列化脱敏: 基于spring mvc、springboot项目,在通过后端使用json格式返回数据时,都会被HttpMessageConverters此类来做处理,fastjson集成到spring提供了FastJsonHttpMessageConverter为序列化做拦截处理。只需要数据在返回前端时做序列化拦截,将需要处理的字段自定义处理就完成,能大大简化代码实现难度,对代码解耦提升特别巨大。
实现思路: 在实现序列化时,是可以获取字段的属性、当前对象。fastjson提供了很多案例,包括日期格式的返回,所以需要借鉴此方式,使用注解,在序列化过程拦截起来,并按照预期完成脱敏。
具体实现如下:
定义统一脱敏接口
public interface DataMaskingOperation {
String MASK_CHAR="*";
String mask(String content,String maskChar);
}
定义枚举类
public enum DataMaskingEnum {
NO_MASK((str,maskChar)->str),
PHONE_MASK((str,maskChar)->{
UserContext userContext = RequestLinkContext.get();
if (Objects.nonNull(userContext)) {
if(StringUtils.isNotEmpty(str)&&str.length()>3&&userContext.isMask()){
String phoneStars = str.substring(0,3);
for (int i = 0; i < str.length() - 3; ++i) {
phoneStars += maskChar;
}
return phoneStars;
}
}
return str;
}),
;