project-common/src/main/java/com/project/common/annotation/Sensitive.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
project-common/src/main/java/com/project/common/utils/SensitiveUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
project-enforce/src/main/java/com/project/enforce/domain/vo/EnforceOrderVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
project-system/src/main/java/com/project/system/service/ISysCompanyService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
project-common/src/main/java/com/project/common/annotation/Sensitive.java
New file @@ -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 } } project-common/src/main/java/com/project/common/utils/SensitiveUtil.java
New file @@ -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; } } 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 = "申请人id") @ApiModelProperty("申请人id") 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正常,1预警") @ApiModelProperty("预警状态:0正常,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 = "执行人id") @ApiModelProperty("执行人id") 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") 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; } 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); /** * 查询单个