在实际项目中通常需要对用户的敏感信息比如身份号、家庭地址、手机号等进行脱敏操作以保证信息安全。
解决方案
-
每个接口单独处理,这种方式操作简单,但是重复工作量非常大,而且后续脱敏规则变更是需要逐个修改。
-
使用定义Jackson注解,在序列化的时候对敏感字段值进行处理,这种方式高效又优雅,省时省力,支持扩展。
这里我们使用注解的方式实现,在序列化的时候对敏感字段值进行处理。
项目结构如下
1. 新建脱敏注解类
在接口返回实体字段添加该注解并指定脱敏规则,接口返回数据当前字段会按规则脱敏。
package com.mfc.test.datamasking;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DataMaskingJsonSerializer.class)
public @interface DataMasking {
// 脱敏规则
MaskingRule maskingRule();
}
2.新建脱敏规则设置类
该类是个枚举值,设置字段的脱敏方式
package com