89 lines
3.4 KiB
Java
89 lines
3.4 KiB
Java
package com.muyu.domain.serialize;
|
|
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
import cn.hutool.core.util.DesensitizedUtil;
|
|
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 com.muyu.domain.enumerate.DesensitizationTypeEnum;
|
|
import com.muyu.domain.enumerate.Desensitization;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.NoArgsConstructor;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Objects;
|
|
|
|
@NoArgsConstructor
|
|
@AllArgsConstructor
|
|
public class DesensitizationSerialize extends JsonSerializer<String> implements ContextualSerializer {
|
|
private DesensitizationTypeEnum type;
|
|
|
|
private Integer startInclude;
|
|
|
|
private Integer endExclude;
|
|
|
|
|
|
|
|
@Override
|
|
public void serialize(String str, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
|
|
switch (type) {
|
|
case NAME:
|
|
jsonGenerator.writeString(DesensitizedUtil.chineseName(String.valueOf(str)));
|
|
break;
|
|
// 身份证
|
|
case ID_CARD:
|
|
jsonGenerator.writeString(DesensitizedUtil.idCardNum(String.valueOf(str), 1, 2));
|
|
break;
|
|
// 手机号
|
|
case MOBILE_PHONE:
|
|
jsonGenerator.writeString(DesensitizedUtil.mobilePhone(String.valueOf(str)));
|
|
break;
|
|
// 地址
|
|
case ADDRESS:
|
|
jsonGenerator.writeString(DesensitizedUtil.address(String.valueOf(str), 8));
|
|
break;
|
|
// 邮箱
|
|
case EMAIL:
|
|
jsonGenerator.writeString(DesensitizedUtil.email(String.valueOf(str)));
|
|
break;
|
|
// 密码
|
|
case PASSWORD:
|
|
jsonGenerator.writeString(DesensitizedUtil.password(String.valueOf(str)));
|
|
break;
|
|
// 银行卡
|
|
case BANK_CARD:
|
|
jsonGenerator.writeString(DesensitizedUtil.bankCard(String.valueOf(str)));
|
|
break;
|
|
default:
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException {
|
|
if (beanProperty != null) {
|
|
// 判断数据类型是否为String类型
|
|
if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) {
|
|
// 获取定义的注解
|
|
Desensitization desensitization = beanProperty.getAnnotation(Desensitization.class);
|
|
// 为null
|
|
if (desensitization == null) {
|
|
desensitization = beanProperty.getContextAnnotation(Desensitization.class);
|
|
}
|
|
// 不为null
|
|
if (desensitization != null) {
|
|
int i = desensitization.endExclude();
|
|
return new DesensitizationSerialize(desensitization.type(), desensitization.startInclude(),
|
|
desensitization.endExclude());
|
|
}
|
|
}
|
|
|
|
return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty);
|
|
}
|
|
return serializerProvider.findNullValueSerializer(null);
|
|
}
|
|
}
|