From 1618b864a7db55e541fa5b73022f305aae4cf1e1 Mon Sep 17 00:00:00 2001
From: ZQN <364596817@qq.com>
Date: 星期二, 25 三月 2025 17:39:30 +0800
Subject: [PATCH] 脱敏
---
project-common/src/main/java/com/project/common/annotation/Sensitive.java | 25 ++++++++
project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java | 34 +++++++++++
project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java | 14 ++--
project-common/src/main/java/com/project/common/utils/SensitiveUtil.java | 102 ++++++++++++++++++++++++++++++++++
project-system/src/main/java/com/project/system/service/ISysCompanyService.java | 2
5 files changed, 170 insertions(+), 7 deletions(-)
diff --git a/project-common/src/main/java/com/project/common/annotation/Sensitive.java b/project-common/src/main/java/com/project/common/annotation/Sensitive.java
new file mode 100644
index 0000000..c85fe2b
--- /dev/null
+++ b/project-common/src/main/java/com/project/common/annotation/Sensitive.java
@@ -0,0 +1,25 @@
+package com.project.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鍔熻兘鎻忚堪锛�
+ *
+ * @author ZQN
+ * @version 1.0 2025-03-25 17:01
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Sensitive {
+ SensitiveType type() default SensitiveType.DEFAULT;
+
+ enum SensitiveType {
+ DEFAULT,
+ PHONE,
+ EMAIL,
+ ID_CARD
+ }
+}
diff --git a/project-common/src/main/java/com/project/common/utils/SensitiveUtil.java b/project-common/src/main/java/com/project/common/utils/SensitiveUtil.java
new file mode 100644
index 0000000..9d4f4bf
--- /dev/null
+++ b/project-common/src/main/java/com/project/common/utils/SensitiveUtil.java
@@ -0,0 +1,102 @@
+package com.project.common.utils;
+
+import com.project.common.annotation.Sensitive;
+
+import java.lang.reflect.Field;
+import java.util.regex.Pattern;
+
+/**
+ * 鍔熻兘鎻忚堪锛�
+ *
+ * @author ZQN
+ * @version 1.0 2025-03-25 17:04
+ */
+public class SensitiveUtil {
+
+ public static Object desensitize(Object obj) {
+ if (obj == null) {
+ return null;
+ }
+ Class<?> clazz = obj.getClass();
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.isAnnotationPresent(Sensitive.class)) {
+ Sensitive sensitive = field.getAnnotation(Sensitive.class);
+ field.setAccessible(true);
+ try {
+ Object value = field.get(obj);
+ if (value != null && value instanceof String) {
+ String strValue = (String) value;
+ String desensitizedValue = desensitizeByType(strValue, sensitive.type());
+ field.set(obj, desensitizedValue);
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return obj;
+ }
+
+ private static String desensitizeByType(String value, Sensitive.SensitiveType type) {
+ switch (type) {
+ case PHONE:
+ return desensitizePhone(value);
+ case EMAIL:
+ return desensitizeEmail(value);
+ case ID_CARD:
+ return desensitizeIdCard(value);
+ default:
+ return desensitizeDefault(value);
+ }
+ }
+
+ private static String desensitizeDefault(String value) {
+ if (value.length() <= 1) {
+ return value;
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append(value.charAt(0));
+ if (value.length() > 2) {
+ for (int i = 0; i < value.length() - 2; i++) {
+ sb.append("*");
+ }
+ sb.append(value.charAt(value.length() - 1));
+ } else {
+ sb.append("*");
+ }
+ return sb.toString();
+ }
+
+ private static String desensitizePhone(String phone) {
+ if (Pattern.matches("^\\d{11}$", phone)) {
+ return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
+ }
+ return phone;
+ }
+
+ private static String desensitizeEmail(String email) {
+ if (email.contains("@")) {
+ String[] parts = email.split("@");
+ String name = parts[0];
+ if (name.length() <= 1) {
+ return email;
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append(name.charAt(0));
+ for (int i = 0; i < name.length() - 2; i++) {
+ sb.append("*");
+ }
+ sb.append(name.charAt(name.length() - 1));
+ return sb.toString() + "@" + parts[1];
+ }
+ return email;
+ }
+
+ private static String desensitizeIdCard(String idCard) {
+ if (Pattern.matches("^\\d{18}$", idCard)) {
+ return idCard.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1**********$2");
+ }
+ return idCard;
+ }
+}
diff --git a/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java b/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java
index 19fd8cd..3604679 100644
--- a/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java
+++ b/project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java
@@ -2,6 +2,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.project.common.annotation.Excel;
+import com.project.common.annotation.Sensitive;
import com.project.enforce.domain.EnforcePeer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -29,27 +30,42 @@
@Excel(name = "鍗曟嵁缂栧彿")
@ApiModelProperty("鍗曟嵁缂栧彿")
private String orderNo;
+
@Excel(name = "浼佷笟id")
@ApiModelProperty("浼佷笟id")
private Long companyId;
+
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
@Excel(name = "浼佷笟鍚�")
@ApiModelProperty("浼佷笟鍚�")
private String companyName;
+
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
@Excel(name = "浼佷笟绀句細缂栫爜")
@ApiModelProperty("浼佷笟绀句細缂栫爜")
private String companyCode;
+
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
@Excel(name = "浼佷笟鑱旂郴浜�")
@ApiModelProperty("浼佷笟鑱旂郴浜�")
private String companyUser;
+
+ @Sensitive(type = Sensitive.SensitiveType.PHONE)
@Excel(name = "浼佷笟鑱旂郴浜虹數璇�" , readConverterExp = "璐�=鍙�")
@ApiModelProperty("浼佷笟鑱旂郴浜虹數璇濓紙璐﹀彿锛�")
private String companyPhone;
+
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
@Excel(name = "浼佷笟鍦板潃")
@ApiModelProperty("浼佷笟鍦板潃")
private String companyAddress;
+
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
@Excel(name = "鎵�灞炲尯鍩熺紪鐮�")
@ApiModelProperty("鎵�灞炲尯鍩熺紪鐮�")
private String regionCode;
+
+
@Excel(name = "鎵�灞炲尯鍩�")
@ApiModelProperty("鎵�灞炲尯鍩�")
private String regionName;
@@ -67,18 +83,28 @@
@Excel(name = "鐢宠浜篿d")
@ApiModelProperty("鐢宠浜篿d")
private Long applyId;
+
+
+
@Excel(name = "鐢宠浜�")
@ApiModelProperty("鐢宠浜�")
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
private String applyUser;
+
+ @Sensitive(type = Sensitive.SensitiveType.PHONE)
@Excel(name = "鐢宠浜虹數璇�")
@ApiModelProperty("鐢宠浜虹數璇�")
private String applyPhone;
+
@Excel(name = "鐢宠浜哄崟浣�")
@ApiModelProperty("鐢宠浜哄崟浣�")
private Long applyDeptId;
+
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
@Excel(name = "鐢宠浜哄崟浣�")
@ApiModelProperty("鐢宠浜哄崟浣�")
private String applyDeptName;
+
@Excel(name = "鐢宠鏃堕棿" , width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("鐢宠鏃堕棿")
@@ -101,6 +127,7 @@
@Excel(name = "鎵ф硶闃熷憳浜烘暟")
@ApiModelProperty("鎵ф硶闃熷憳浜烘暟")
private Integer userNum;
+
@Excel(name = "棰勮鐘舵�侊細0姝e父锛�1棰勮")
@ApiModelProperty("棰勮鐘舵�侊細0姝e父锛�1棰勮")
private Integer warnStatus;
@@ -115,6 +142,7 @@
private Long checkDeptId;
@Excel(name = "瀹℃壒浜哄崟浣�")
@ApiModelProperty("瀹℃壒浜哄崟浣�")
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
private String checkDeptName;
@Excel(name = "璁㈠崟鐘舵�侊細-1鎷掔粷锛�0寰呭鎵癸紝1瀹℃壒涓紝2閫氳繃")
@ApiModelProperty("璁㈠崟鐘舵�侊細-1鎷掔粷锛�0寰呭鎵癸紝1瀹℃壒涓紝2閫氳繃")
@@ -132,17 +160,23 @@
@Excel(name = "鎵ц浜篿d")
@ApiModelProperty("鎵ц浜篿d")
private Long executeId;
+
@Excel(name = "鎵ц浜�")
@ApiModelProperty("鎵ц浜�")
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
private String executeUser;
+
@Excel(name = "鎵ц浜虹數璇�")
@ApiModelProperty("鎵ц浜虹數璇�")
+ @Sensitive(type = Sensitive.SensitiveType.PHONE)
private String executePhone;
+
@Excel(name = "鎵ц浜哄崟浣�")
@ApiModelProperty("鎵ц浜哄崟浣�")
private Long executeDeptId;
@Excel(name = "鎵ц浜哄崟浣�")
@ApiModelProperty("鎵ц浜哄崟浣�")
+ @Sensitive(type = Sensitive.SensitiveType.DEFAULT)
private String executeDeptName;
@Excel(name = "鎵ц鏃堕棿" , width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java b/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
index e9ee077..5202476 100644
--- a/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
+++ b/project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
@@ -9,10 +9,7 @@
import com.project.common.core.domain.model.DateRange;
import com.project.common.enums.OrderPre;
import com.project.common.exception.base.BaseException;
-import com.project.common.utils.DateUtils;
-import com.project.common.utils.JsonUtils;
-import com.project.common.utils.SecurityUtils;
-import com.project.common.utils.StringUtils;
+import com.project.common.utils.*;
import com.project.enforce.domain.*;
import com.project.enforce.domain.bo.editBo.EnforceComplaintLogBo;
import com.project.enforce.domain.bo.editBo.EnforceOrderBo;
@@ -140,7 +137,9 @@
QueryWrapper<EnforceOrder> qw = getQw(bo);
qw.ge("order_status",2);
List<EnforceOrder> list = this.list(qw);
- return Convert.toList(EnforceOrderVo.class , list);
+ List<EnforceOrderVo> vos = Convert.toList(EnforceOrderVo.class, list);
+ vos.forEach(SensitiveUtil::desensitize);
+ return vos;
}
/**
@@ -215,7 +214,9 @@
.eq(EnforceOrder::getIsShow, 1)
.ge(EnforceOrder::getOrderStatus, 4)
);
- return Convert.toList(EnforceOrderVo.class, list);
+ List<EnforceOrderVo> vos = Convert.toList(EnforceOrderVo.class, list);
+ vos.forEach(SensitiveUtil::desensitize);
+ return vos;
}
/**
@@ -244,6 +245,7 @@
}
}
}
+ SensitiveUtil.desensitize(vo);
return vo;
}
diff --git a/project-system/src/main/java/com/project/system/service/ISysCompanyService.java b/project-system/src/main/java/com/project/system/service/ISysCompanyService.java
index 6fe72e6..77be725 100644
--- a/project-system/src/main/java/com/project/system/service/ISysCompanyService.java
+++ b/project-system/src/main/java/com/project/system/service/ISysCompanyService.java
@@ -20,7 +20,7 @@
/**
* 鏌ヨ鍒楄〃
*/
- List<SysCompanyVo> queryList(SysCompanyQueryBo bo);
+ List<SysCompanyVo> queryList(SysCompanyQueryBo bo);
/**
* 鏌ヨ鍗曚釜
--
Gitblit v1.9.1