自定义一个注解(需要依赖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;
正则式根据自己业务需求进行更改
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号