カスタム注釈によるデータの脱敏


カスタム注釈によるデータの脱敏
説明
ユーザーの身分証明書の表示を実現する必要があるが、機密データは隠す必要がある.
コード#コード#
コードは次のとおりです(例).
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;
}