diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java index 26a0e2d01a..3985a6db44 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java @@ -17,6 +17,8 @@ public @interface MaskResponse { String MASK_TYPE_MOBILE = "MOBILE"; String MASK_TYPE_CHINESE_NAME = "CHINESE_NAME"; + String MASK_TYPE_YANTAI_PEOPLE_NAME = "YANTAI_PEOPLE_NAME"; + ///** // * 默认的一些字段,如果没有手动指定,就会使用默认的。如果手动指定了,就不再使用默认的 // */ @@ -31,11 +33,11 @@ public @interface MaskResponse { * 要打码的字段列表。会递归的着这些字段 * @return */ - String[] fieldNames() default {"idCard","mobile","phone"}; + String[] fieldNames() default {"idCard","mobile","phone","yantaiPeopleName"}; /** * 要打码的类型 * @return */ - String[] fieldsMaskType() default { MASK_TYPE_ID_CARD, MASK_TYPE_MOBILE, MASK_TYPE_MOBILE }; + String[] fieldsMaskType() default { MASK_TYPE_ID_CARD, MASK_TYPE_MOBILE, MASK_TYPE_MOBILE , MASK_TYPE_YANTAI_PEOPLE_NAME}; } diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java index 1f1b9848b3..652af74529 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java @@ -15,6 +15,8 @@ import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * desc:脱敏处理器 @@ -137,7 +139,10 @@ public class MaskProcessor { return maskMobile(originString); } else if (MaskResponse.MASK_TYPE_CHINESE_NAME.equals(maskType)) { return maskChineseName(originString); - } else { + }else if (MaskResponse.MASK_TYPE_YANTAI_PEOPLE_NAME.equals(maskType)) { + return maskYantaiPeopleName(originString); + } + else { return originString; } } @@ -166,6 +171,57 @@ public class MaskProcessor { } } + /** + * 对烟台姓名进行判断 + * @param originString + * @return + */ + private String maskYantaiPeopleName(String originString) { + if (StringUtils.isBlank(originString) || originString.length() == 1) { + // 空串,或者只有一个字的,不打码,直接返回 + return originString; + } + + String regex = "^[\\u4e00-\\u9fa5]+$"; // 正则表达式匹配中文字符 + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(originString); + // 中文名字 + if (matcher.matches()) { + + char lastChar = originString.charAt(originString.length() - 1); + StringBuilder maskedName = new StringBuilder(); + for (int i = 0; i < originString.length() - 1; i++) { + maskedName.append('*'); + } + maskedName.append(lastChar); + return maskedName.toString(); + + } else { + // 英文名字 + if (originString != null && originString.length() > 2) { + StringBuilder maskedName = new StringBuilder(); + boolean foundSecondUppercase = false; + + for (int i = 0; i < originString.length(); i++) { + char currentChar = originString.charAt(i); + + if (Character.isUpperCase(currentChar)) { + if (!foundSecondUppercase) { + foundSecondUppercase = true; + } else { + // 替换第二个大写字母前的字符为"*" + maskedName.append('*'); + break; // 替换后,跳出循环 + } + } + maskedName.append(currentChar); + } + return maskedName.toString(); + } + } + return originString; + } + /** * 唯一整件号打码,可能是身份证号或者是护照号 * 将明文字符串打码变为掩码。保留前6,后面打码 diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeDeathController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeDeathController.java index 92cdab0235..f993a588b7 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeDeathController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeDeathController.java @@ -39,7 +39,7 @@ public class ChangeDeathController { private ChangeDeathService changeDeathService; @RequestMapping("page") - @MaskResponse(fieldNames = {"mobile", "idCard"}, fieldsMaskType = {MaskResponse.MASK_TYPE_MOBILE, MaskResponse.MASK_TYPE_ID_CARD}) + @MaskResponse(fieldNames = {"mobile", "idCard","name"}, fieldsMaskType = {MaskResponse.MASK_TYPE_MOBILE, MaskResponse.MASK_TYPE_ID_CARD,MaskResponse.MASK_TYPE_YANTAI_PEOPLE_NAME}) public Result> page(@RequestParam Map params){ PageData page = changeDeathService.page(params); return new Result>().ok(page);