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;
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|