heheng
7 天以前 d8012ee77b6a9e86611aae9074d5925826f4210d
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
package com.gkhy.exam.common.utils;
 
import cn.hutool.core.util.DesensitizedUtil;
import com.gkhy.exam.common.annotation.DataDesensitizationType;
import com.gkhy.exam.common.api.CommonPage;
import com.gkhy.exam.common.api.CommonResult;
 
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.List;
 
/**
 * 脱密工具类,(缺陷,不支持子类数据脱密)
 */
public class DesenseUtil {
 
    public static void assertResult(Object data) throws ClassNotFoundException, IllegalAccessException {
        if(data instanceof CommonResult){
            CommonResult cr= (CommonResult) data;
            Object obj=cr.getData();
            if(obj instanceof CommonPage){
                assetListResult(((CommonPage)obj).getList());
            }else if (obj instanceof List){
                assetListResult(obj);
            }else{
                assetOneResult(obj);
            }
        }
    }
    public static void assetListResult(Object data) throws ClassNotFoundException, IllegalAccessException {
        List list=(List) data;
        for (Object record : list) {
            Class<?> targetClass = Class.forName(record.getClass().getName());
            Field[] fields = targetClass.getDeclaredFields();
            reflexUpdateData(record, fields);
        }
    }
 
    public static void assetOneResult(Object data) throws IllegalAccessException, ClassNotFoundException {
        Class<?> targetClass = Class.forName(data.getClass().getName());
        Field[] fields=targetClass.getDeclaredFields();
        reflexUpdateData(data,fields);
    }
 
    public static void reflexUpdateData(Object data, Field[] fields) throws IllegalAccessException {
        for (Field field : fields) {
            field.setAccessible(true);
            Object value = field.get(data);
            if (!(value instanceof String)) {
                continue;
            }
            String valueStr = (String) value;
            Annotation[] annotations = field.getDeclaredAnnotations();
            for (Annotation annotation : annotations) {
                if (annotation instanceof DataDesensitizationType) {
                    DataDesensitizationType targetAnnotation = (DataDesensitizationType) annotation;
                    switch (targetAnnotation.type()) {
                        case CHINESE_NAME: {
                            field.set(data, DesensitizedUtil.chineseName(valueStr));
                            break;
                        }
                        case ID_CARD: {
                            field.set(data, DesensitizedUtil.idCardNum(valueStr, 3, 3));
                            break;
                        }
                        case MOBILE_PHONE: {
                            field.set(data, DesensitizedUtil.mobilePhone(valueStr));
                            break;
                        }
                        default: {
                            break;
                        }
                    }
                }
            }
        }
    }
}