Browse Source

脱敏新增

master
lichao 2 years ago
parent
commit
fd24c193ea
  1. 6
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/MaskResponse.java
  2. 58
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java
  3. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeDeathController.java

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

58
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后面打码

2
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<PageData<ChangeDeathDTO>> page(@RequestParam Map<String, Object> params){
PageData<ChangeDeathDTO> page = changeDeathService.page(params);
return new Result<PageData<ChangeDeathDTO>>().ok(page);

Loading…
Cancel
Save