yangys
2024-04-25 365fac8a2ac52c8a3f9601fdf30e537ef373e8df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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);
    }
}