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