Java数据脱敏核心是识别敏感字段、定义规则、适时替换;支持手机号、身份证、姓名、银行卡、邮箱等类型注解标记,通过反射工具类自动处理,并借助ResponseBodyAdvice实现Spring MVC响应前统一脱敏。
Java中实现数据脱敏,核心是**识别敏感字段 + 定义脱敏规则 + 在合适时机执行替换**,不依赖第三方框架也能快速落地。
不同字段适用不同脱敏策略,需按业务安全等级选择:
自定义一个 @Desensitize 注解,标注需要脱敏的字段,并指定脱敏类型:
@Target({FIELD})
@Retention(RUNTIME)
public @interface Desensitize {
DesensitizeType value() default DesensitizeType.DEFAULT;
}再定义枚举 DesensitizeType 包含 PHONE、ID_CARD、NAME、EMAIL 等值。这样既清晰又便于后续统一处理。
写一个工具类 DesensitizeUtil,遍历对象所有字段,检查是否含 @Desensitize 注解,根据类型调用对应脱敏方法:
利用 ResponseBodyAdvice 接口,在 Controller 返回响应体之前拦截并脱敏:
@ControllerAdvice public class DesensitizeResponseAdvice implements ResponseBodyAdvice
这样所有返回 JSON 的接口自动生效,无需每个 Controller 手动调用,也避免脱敏逻辑散落在业务代码中。