public enum SensitiveStrategy {
ADDRESS(s -> s.replaceAll("(\S{3})\S{2}(\S*)\S{2}", "$1****$2****")),
ID_CARD(s -> s.replaceAll("(\d{4})\d{10}(\w{4})", "$1****$2")),
PHONE(s -> s.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2")),
USERNAME(s -> s.replaceAll("(\S)\S(\S*)", "$1*$2"));
private final Function desensitizer;
SensitiveStrategy(Function desensitizer) {
this.desensitizer = desensitizer;
}
public Function desensitizer() {
return desensitizer;
}
}
2.序列化注解自定义实现
public class SensitiveJsonSerializer extends JsonSerializer3.在对应返回实体类implements ContextualSerializer { private SensitiveStrategy strategy; @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(strategy.desensitizer().apply(value)); } @Override public JsonSerializer> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException { Sensitive annotation = property.getAnnotation(Sensitive.class); if (Objects.nonNull(annotation)&&Objects.equals(String.class, property.getType().getRawClass())) { this.strategy = annotation.strategy(); return this; } return prov.findValueSerializer(property.getType(), property); } }
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String mobile;
@Sensitive(strategy = SensitiveStrategy.ID_CARD)
private String idNo;
以上在返回的时候在json序列化的时候直接处理。



