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