package com.qianwen.core.tool.senstive;
|
|
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.databind.BeanProperty;
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
import java.io.IOException;
|
import java.util.Objects;
|
import com.qianwen.core.tool.utils.DesensitizedUtils;
|
|
public class SensitiveSerialize extends JsonSerializer<String> implements ContextualSerializer {
|
private SensitiveTypeEnum type;
|
private Integer prefixNoMaskLen;
|
private Integer suffixNoMaskLen;
|
private String maskStr;
|
|
public SensitiveSerialize() {
|
}
|
|
public SensitiveSerialize(final SensitiveTypeEnum type, final Integer prefixNoMaskLen, final Integer suffixNoMaskLen, final String maskStr) {
|
this.type = type;
|
this.prefixNoMaskLen = prefixNoMaskLen;
|
this.suffixNoMaskLen = suffixNoMaskLen;
|
this.maskStr = maskStr;
|
}
|
|
public void serialize(final String origin, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
|
switch (this.type) {
|
case CHINESE_NAME:
|
jsonGenerator.writeString(DesensitizedUtils.chineseName(origin));
|
return;
|
case ID_CARD:
|
jsonGenerator.writeString(DesensitizedUtils.idCardNum(origin));
|
return;
|
case FIXED_PHONE:
|
jsonGenerator.writeString(DesensitizedUtils.fixedPhone(origin));
|
return;
|
case MOBILE_PHONE:
|
jsonGenerator.writeString(DesensitizedUtils.mobilePhone(origin));
|
return;
|
case ADDRESS:
|
jsonGenerator.writeString(DesensitizedUtils.address(origin));
|
return;
|
case EMAIL:
|
jsonGenerator.writeString(DesensitizedUtils.email(origin));
|
return;
|
case BANK_CARD:
|
jsonGenerator.writeString(DesensitizedUtils.bankCard(origin));
|
return;
|
case PASSWORD:
|
jsonGenerator.writeString(DesensitizedUtils.password(origin));
|
return;
|
case KEY:
|
jsonGenerator.writeString(DesensitizedUtils.key(origin));
|
return;
|
case CUSTOMER:
|
jsonGenerator.writeString(DesensitizedUtils.desValue(origin, this.prefixNoMaskLen.intValue(),
|
this.suffixNoMaskLen.intValue(), this.maskStr));
|
return;
|
}
|
throw new IllegalArgumentException("Unknow sensitive type enum " + this.type);
|
|
}
|
|
public JsonSerializer<?> createContextual(final SerializerProvider serializerProvider, final BeanProperty beanProperty) throws JsonMappingException {
|
if (beanProperty != null) {
|
if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) {
|
Sensitive sensitive = (Sensitive) beanProperty.getAnnotation(Sensitive.class);
|
if (sensitive == null) {
|
sensitive = (Sensitive) beanProperty.getContextAnnotation(Sensitive.class);
|
}
|
if (sensitive != null) {
|
return new SensitiveSerialize(sensitive.type(), Integer.valueOf(sensitive.prefixNoMaskLen()), Integer.valueOf(sensitive.suffixNoMaskLen()), sensitive.maskStr());
|
}
|
}
|
return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty);
|
}
|
return serializerProvider.findNullValueSerializer((BeanProperty) null);
|
}
|
}
|