0
点赞
收藏
分享

微信扫一扫

AOP数据脱敏

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DesensitizedSerializer.class)
public @interface Desensitized {

SensitiveTypeEnum sensitiveType() default SensitiveTypeEnum.PHONE;
}
public class DesensitizedSerializer extends JsonSerializer<String> implements ContextualSerializer {

private SensitiveTypeEnum sensitiveType;

@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (this.sensitiveType == null || StringUtils.isEmpty(value)) {
gen.writeString(value);
return;
}

switch (this.sensitiveType) {
case NAME:
gen.writeString(StringUtils.overlay(value, StringUtils.repeat('*', value.length() - 1), 1, value.length()));
break;
case ID_CARD:
gen.writeString(StringUtils.overlay(value, "***********", 3, value.length() - 4));
break;
case PHONE:
gen.writeString(StringUtils.overlay(value, "****", 3, value.length() - 4));
break;
default:
break;
}
}

@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
if (property != null) {
Desensitized desensitized = property.getAnnotation(Desensitized.class);
if (desensitized == null) {
desensitized = property.getContextAnnotation(Desensitized.class);
}

if (desensitized != null) {
this.sensitiveType = desensitized.sensitiveType();
}
}
return this;
}
}


举报

相关推荐

0 条评论