自定义注解实现数据脱敏
描述
需要实现用户的身份证显示 但敏感数据需要隐藏 如:41148xxxxxxxxxxx9代码
代码如下(示例):
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
/**
* @program: chargingpile
* @description: 数据脱敏
* @author: Mr.ch
* @create: 2020-08-07
**/
public class EncryptSerializer extends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator generator, SerializerProvider serializer) throws IOException {
if (StringUtils.isNotBlank(value)) {
generator.writeString(IdEncryptUtil.numberEncrypt(value));
} else {
generator.writeNull();
}
}
}
import org.apache.commons.lang3.StringUtils;
public class IdEncryptUtil {
public static final Integer PHONE_NUM_LENGTH = 11;
public static final Integer PERSON_NUM_LENGTH = 18;
public static final Integer BANK_CARD_ID_MIN_LENGTH = 15;
public static final Integer BANK_CARD_ID_MAX_LENGTH = 19;
public IdEncryptUtil() {
}
/**
* 手机号脱敏
*/
public static String phoneNumEncrypt(String phoneNum) {
return !StringUtils.isEmpty(phoneNum) && phoneNum.length() >= PHONE_NUM_LENGTH ? phoneNum.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*") : phoneNum;
}
/**
* 手机号脱敏
*/
public static String personIdEncrypt(String personId) {
return !StringUtils.isEmpty(personId) && personId.length() >= PERSON_NUM_LENGTH ? personId.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*") : personId;
}
/**
* 银行卡脱敏
*/
public static String bankCardNumEncrypt(String bankCarNo) {
return !StringUtils.isEmpty(bankCarNo) && bankCarNo.length() >= BANK_CARD_ID_MIN_LENGTH && bankCarNo.length() <= BANK_CARD_ID_MAX_LENGTH ? bankCarNo.replaceAll("(?<=\\w{4})\\w(?=\\w{4})", "*") : bankCarNo;
}
/**
* 数字脱敏
*/
public static String numberEncrypt(String bankCarNo) {
return StringUtils.isEmpty(bankCarNo) ? bankCarNo : bankCarNo.replaceAll("(?<=\\w{4})\\w(?=\\w{4})", "*");
}
}
使用
@Data
public class CpUserVo {
private static final long serialVersionUID = 1L;
/**
* 身份证号 脱敏
*/
@JsonSerialize(using = EncryptSerializer.class)
private String idCard;
}