随笔 - 42  文章 - 0 评论 - 1 阅读 - 18189
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

自定义一个注解(需要依赖jackson。jar包)

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveJsonSerializer.class)
public @interface Sensitive {
SensitiveStrategy starategy();
}

定义一个枚举类SensitiveStrategy(仅支持java8以后,8以前没有Function方法)
public enum SensitiveStrategy {

ID_CARD(s -> s.replaceAll("^(.{3})(?:\\d+)(.{4})","$1****$2")),
PHONE(s -> s.replaceAll("^(.{3})(?:\\d+)(.{4})","$1****$2")),
ADDRESS(s -> s.replaceAll("^(.{2})(?:\\S+)(.{2})","$1****$2")),
BANKCARD(s -> s.replaceAll("^(.{5})(?:\\d+)(.{5})","$1****$2"));


private final Function<String,String> desensitizer;

SensitiveStrategy(Function<String,String> desensitizer){
this.desensitizer = desensitizer;
}

public Function<String,String> desensitizer(){
return desensitizer;
}
}

定义一个序列化器SensitiveJsonSerializer
public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {

private SensitiveStrategy strategy;

@Override
public void serialize(String value, JsonGenerator generator, SerializerProvider serializerProvider) throws IOException {
generator.writeString(strategy.desensitizer().apply(value));
}

@Override
public JsonSerializer<?> createContextual(SerializerProvider provider, BeanProperty property) throws JsonMappingException {
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
this.strategy = annotation.starategy();
return this;
}
return provider.findValueSerializer(property.getType(), property);
}
}

然后在需要脱敏的实体类字段上加上自定义注解
@ApiModelProperty(value = "电话")
@Sensitive(starategy = SensitiveStrategy.PHONE)
private String tel;

正则式根据自己业务需求进行更改

posted on   我叫福禄娃  阅读(605)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示