在spring boot中利用自定义注解+hutool工具+自定义序列化器来实现注解脱敏(动态控制数据脱敏处理的实现)
在Spring Boot中,你可以通过自定义注解、Hutool工具类以及自定义序列化器来实现数据的动态脱敏。以下是一个简化的示例:
- 自定义注解
@SensitiveData
用于标记需要脱敏的字段:
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface SensitiveData {
// 可以添加配置参数,如脱敏规则等
}
- 使用Hutool的
DesensitizedHandler
接口实现自定义脱敏逻辑:
public class CustomDesensitizedHandler implements DesensitizedHandler {
@Override
public String desensitize(Object source, String desensitizeType) {
if ("userName".equals(desensitizeType)) {
// 用户名脱敏规则,如保留前两位和后一位
return StrUtil.subByLength(source.toString(), 2, 2, "**");
}
// 其他脱敏类型的处理...
return null;
}
}
- 自定义序列化器
CustomJsonSerializer
处理脱敏逻辑:
public class CustomJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// 获取字段上的注解
Field[] fields = value.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(SensitiveData.class)) {
// 使用Hutool的脱敏工具类进行处理
DesensitizedValue sv = DesensitizedUtil.desensitize(field.get(value), new CustomDesensitizedHandler());
field.setAccessible(true);
try {
field.set(value, sv.getResult());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
// 继续使用原生的序列化逻辑进行序列化
super.serialize(value, gen, serializers);
}
}
- 配置自定义序列化器:
在Spring Boot的配置文件中配置自定义序列化器,例如 application.properties
或者 application.yml
:
spring.jackson.serializer.SENSITIVE_DATA=com.yourpackage.CustomJsonSerializer
以上代码提供了一个简化的示例,实际应用时你可能需要根据具体的脱敏规则和业务需求进行相应的调整。这个示例展示了如何利用自定义注解、自定义序列化器和第三方库Hutool来实现数据的动态脱敏。
评论已关闭