springboot3使用自定义注解+Jackson优雅实现接口数据脱敏
在Spring Boot 3中,你可以通过自定义注解和Jackson的@JsonSerializer
来实现数据脱敏。以下是一个简单的例子:
- 自定义注解
@DataMasking
:
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DataMaskingSerializer.class)
public @interface DataMasking {
}
- 自定义数据脱敏的
Serializer
:
public class DataMaskingSerializer extends StdScalarSerializer<Object> implements ContextualSerializer {
protected DataMaskingSerializer() {
super(Object.class);
}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
// 实现数据脱敏逻辑,例如用星号*替换部分字符
String maskedValue = maskingLogic(value.toString());
gen.writeString(maskedValue);
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
return new DataMaskingSerializer();
}
private String maskingLogic(String value) {
// 实现脱敏逻辑
return "***"; // 举例,使用星号脱敏
}
}
- 在实体类中使用
@DataMasking
注解:
public class User {
private String id;
@DataMasking
private String username;
// getters and setters
}
- 在
application.properties
或application.yml
中配置Jackson:
spring.jackson.serialization.indent-output=true
使用上述配置,当你返回带有@DataMasking
注解的字段的对象时,Jackson会自动使用DataMaskingSerializer
进行数据脱敏处理。
评论已关闭