From 787384851677da3a8f7f90c5d070e463fd36d77a Mon Sep 17 00:00:00 2001 From: b2baccline <23131013+b2baccline@users.noreply.github.com> Date: Sat, 23 Jan 2021 16:43:17 +0800 Subject: [PATCH] =?UTF-8?q?:racehorse:=20=E4=BC=98=E5=8C=96=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E5=B7=A5=E5=85=B7=EF=BC=8C=E5=B0=86=E8=84=B1=E6=95=8F?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E6=8B=86=E5=88=86=E4=B8=BA=E4=B8=89=E4=B8=AA?= =?UTF-8?q?=EF=BC=8CSimpleDesensitizationHandler=20=E6=94=AF=E6=8C=81SPI?= =?UTF-8?q?=20=E6=B3=A8=E5=85=A5=EF=BC=8C=E6=AD=A3=E5=88=99=E5=92=8C?= =?UTF-8?q?=E6=BB=91=E5=8A=A8=E7=B1=BB=E5=9E=8B=E8=84=B1=E6=95=8F=E5=A4=84?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E5=8F=AF=E7=AE=80=E5=8D=95=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E5=AE=9A=E4=B9=89=EF=BC=8C=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../log/handler/AdminAccessLogHandler.java | 12 +-- .../modules/sys/model/dto/SysUserDTO.java | 6 +- .../modules/sys/model/dto/SysUserPassDTO.java | 8 +- .../desensite/DesensitizationHandler.java | 26 ----- .../DesensitizationTypeConstant.java | 56 ----------- .../desensite/JsonDesensitizeSerializer.java | 94 ++++++++++++++++--- ...> SimpleDesensitizationHandlerHolder.java} | 11 ++- .../SimpleDesensitizationTypeConstant.java | 22 +++++ .../annotation/JsonRegexDesensitize.java | 41 ++++++++ .../JsonSimpleDesensitize.java} | 11 ++- .../annotation/JsonSlideDesensitize.java | 46 +++++++++ .../enums/RegexDesensitizationTypeEnum.java | 39 ++++++++ .../enums/SlideDesensitizationTypeEnum.java | 54 +++++++++++ .../AbstractCenterDesensitizationHandler.java | 61 ------------ .../AbstractRegexDesensitizationHandler.java | 37 -------- .../AllMaskDesensitizationHandler.java | 17 ---- .../BankCardNODesensitizationHandler.java | 17 ---- .../handler/DesensitizationHandler.java | 11 +++ .../handler/EmailDesensitizationHandler.java | 17 ---- ...cryptedPasswordDesensitizationHandler.java | 17 ---- .../IDCardNODesensitizationHandler.java | 17 ---- .../PhoneNumberDesensitizationHandler.java | 17 ---- .../handler/RegexDesensitizationHandler.java | 34 +++++++ .../handler/SimpleDesensitizationHandler.java | 26 +++++ ...=> SixAsteriskDesensitizationHandler.java} | 9 +- .../handler/SlideDesensitizationHandler.java | 51 ++++++++++ ...mmon.core.desensite.DesensitizationHandler | 7 -- ...nsite.handler.SimpleDesensitizationHandler | 1 + 28 files changed, 435 insertions(+), 330 deletions(-) delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationTypeConstant.java rename ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/{DesensitizationHandlerHolder.java => SimpleDesensitizationHandlerHolder.java} (50%) create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationTypeConstant.java create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonRegexDesensitize.java rename ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/{JsonDesensitize.java => annotation/JsonSimpleDesensitize.java} (52%) create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSlideDesensitize.java create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/RegexDesensitizationTypeEnum.java create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/SlideDesensitizationTypeEnum.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractCenterDesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractRegexDesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AllMaskDesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/BankCardNODesensitizationHandler.java create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/DesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EmailDesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EncryptedPasswordDesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/IDCardNODesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/PhoneNumberDesensitizationHandler.java create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/RegexDesensitizationHandler.java create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SimpleDesensitizationHandler.java rename ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/{FixedLengthDesensitizationHandler.java => SixAsteriskDesensitizationHandler.java} (51%) create mode 100644 ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SlideDesensitizationHandler.java delete mode 100644 ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.DesensitizationHandler create mode 100644 ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java index 212101c3..96133fa9 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/log/handler/AdminAccessLogHandler.java @@ -10,9 +10,8 @@ import com.hccake.ballcat.admin.oauth.util.SecurityUtils; import com.hccake.ballcat.commom.log.access.handler.AccessLogHandler; import com.hccake.ballcat.commom.log.constant.LogConstant; import com.hccake.ballcat.commom.log.util.LogUtils; -import com.hccake.ballcat.common.core.desensite.DesensitizationHandler; -import com.hccake.ballcat.common.core.desensite.DesensitizationHandlerHolder; -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; +import com.hccake.ballcat.common.core.desensite.enums.RegexDesensitizationTypeEnum; +import com.hccake.ballcat.common.core.desensite.handler.RegexDesensitizationHandler; import com.hccake.ballcat.common.core.util.IPUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -53,8 +52,7 @@ public class AdminAccessLogHandler implements AccessLogHandler { /** * 脱敏处理器 */ - private final DesensitizationHandler desensitizationHandler = DesensitizationHandlerHolder.TYPE_MAPS - .get(DesensitizationTypeConstant.ENCRYPTED_PASSWORD); + private final RegexDesensitizationHandler regexDesensitizationHandler = new RegexDesensitizationHandler(); /** * 生产一个日志 @@ -122,7 +120,9 @@ public class AdminAccessLogHandler implements AccessLogHandler { for (String paramKey : needDesensitizeParams) { String[] values = parameterMap.get(paramKey); if (values != null && values.length != 0) { - parameterMap.put(paramKey, new String[] { desensitizationHandler.handle(values[0]) }); + String value = regexDesensitizationHandler.handle(values[0], + RegexDesensitizationTypeEnum.ENCRYPTED_PASSWORD); + parameterMap.put(paramKey, new String[] { value }); } } params = objectMapper.writeValueAsString(parameterMap); diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserDTO.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserDTO.java index d8a4101c..709730f2 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserDTO.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserDTO.java @@ -1,7 +1,7 @@ package com.hccake.ballcat.admin.modules.sys.model.dto; -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; -import com.hccake.ballcat.common.core.desensite.JsonDesensitize; +import com.hccake.ballcat.common.core.desensite.annotation.JsonRegexDesensitize; +import com.hccake.ballcat.common.core.desensite.enums.RegexDesensitizationTypeEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -23,7 +23,7 @@ public class SysUserDTO { /** * 前端传入密码 */ - @JsonDesensitize(type = DesensitizationTypeConstant.ENCRYPTED_PASSWORD) + @JsonRegexDesensitize(type = RegexDesensitizationTypeEnum.ENCRYPTED_PASSWORD) @ApiModelProperty(value = "前端传入密码") private String pass; diff --git a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserPassDTO.java b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserPassDTO.java index f8f86f03..626abee2 100644 --- a/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserPassDTO.java +++ b/ballcat-admin/ballcat-admin-core/src/main/java/com/hccake/ballcat/admin/modules/sys/model/dto/SysUserPassDTO.java @@ -1,7 +1,7 @@ package com.hccake.ballcat.admin.modules.sys.model.dto; -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; -import com.hccake.ballcat.common.core.desensite.JsonDesensitize; +import com.hccake.ballcat.common.core.desensite.annotation.JsonRegexDesensitize; +import com.hccake.ballcat.common.core.desensite.enums.RegexDesensitizationTypeEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,7 +20,7 @@ public class SysUserPassDTO { * 前端传入密码 */ @NotBlank(message = "The password cannot be empty!") - @JsonDesensitize(type = DesensitizationTypeConstant.ENCRYPTED_PASSWORD) + @JsonRegexDesensitize(type = RegexDesensitizationTypeEnum.ENCRYPTED_PASSWORD) @ApiModelProperty(value = "前端输入密码") private String pass; @@ -28,7 +28,7 @@ public class SysUserPassDTO { * 前端确认密码 */ @NotBlank(message = "The confirm password cannot be empty!") - @JsonDesensitize(type = DesensitizationTypeConstant.ENCRYPTED_PASSWORD) + @JsonRegexDesensitize(type = RegexDesensitizationTypeEnum.ENCRYPTED_PASSWORD) @ApiModelProperty(value = "前端确认密码") private String confirmPass; diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandler.java deleted file mode 100644 index 5dda7457..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.hccake.ballcat.common.core.desensite; - -/** - * 脱敏处理器 - * - * TODO 复用中央脱敏和正则脱敏,在注解中自定义属性而不必实现一个 Handler - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -public interface DesensitizationHandler { - - /** - * 脱敏类型 - * @return 类型 - */ - String getType(); - - /** - * 脱敏处理 - * @param origin 原始字符串 - * @return 脱敏处理后的字符串 - */ - String handle(String origin); - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationTypeConstant.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationTypeConstant.java deleted file mode 100644 index c3f35e54..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationTypeConstant.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.hccake.ballcat.common.core.desensite; - -/** - * 默认的一些脱敏方式 - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -public final class DesensitizationTypeConstant { - - private DesensitizationTypeConstant() { - } - - /** - * 全脱敏 - * @see com.hccake.ballcat.common.core.desensite.handler.AllMaskDesensitizationHandler - */ - public static final String ALL_MASK = "ALL_MASK"; - - /** - * 银行卡脱敏 - * @see com.hccake.ballcat.common.core.desensite.handler.BankCardNODesensitizationHandler - */ - public static final String BANK_CARD_NO = "BANK_CARD_NO"; - - /** - * 邮箱脱敏 - * @see com.hccake.ballcat.common.core.desensite.handler.EmailDesensitizationHandler - */ - public static final String EMAIL = "EMAIL"; - - /** - * 加密后的密码脱敏 - * @see com.hccake.ballcat.common.core.desensite.handler.EncryptedPasswordDesensitizationHandler - */ - public static final String ENCRYPTED_PASSWORD = "ENCRYPTED_PASSWORD"; - - /** - * 定长脱敏,总是返回定长的数据值 - * @see com.hccake.ballcat.common.core.desensite.handler.FixedLengthDesensitizationHandler - */ - public static final String FIXED_LENGTH = "FIXED_LENGTH"; - - /** - * 身份证号脱敏 - * @see com.hccake.ballcat.common.core.desensite.handler.IDCardNODesensitizationHandler - */ - public static final String ID_CARD_NO = "ID_CARD_NO"; - - /** - * 手机号脱敏 - * @see com.hccake.ballcat.common.core.desensite.handler.PhoneNumberDesensitizationHandler - */ - public static final String PHONE_NUMBER = "PHONE_NUMBER"; - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitizeSerializer.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitizeSerializer.java index b9483817..a6ddb1f2 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitizeSerializer.java +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitizeSerializer.java @@ -7,8 +7,19 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.hccake.ballcat.common.core.desensite.annotation.JsonRegexDesensitize; +import com.hccake.ballcat.common.core.desensite.annotation.JsonSimpleDesensitize; +import com.hccake.ballcat.common.core.desensite.annotation.JsonSlideDesensitize; +import com.hccake.ballcat.common.core.desensite.enums.RegexDesensitizationTypeEnum; +import com.hccake.ballcat.common.core.desensite.enums.SlideDesensitizationTypeEnum; +import com.hccake.ballcat.common.core.desensite.handler.RegexDesensitizationHandler; +import com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler; +import com.hccake.ballcat.common.core.desensite.handler.SlideDesensitizationHandler; import java.io.IOException; +import java.lang.annotation.Annotation; +import java.util.Arrays; +import java.util.List; import java.util.Objects; /** @@ -19,34 +30,87 @@ import java.util.Objects; */ public class JsonDesensitizeSerializer extends JsonSerializer implements ContextualSerializer { - private JsonDesensitize jsonDesensitize; + private Annotation jsonDesensitizeAnnotation; + + /** + * 滑动脱敏处理器 + */ + private final SlideDesensitizationHandler slideDesensitizationHandler = new SlideDesensitizationHandler(); + + /** + * 正则脱敏处理器 + */ + private final RegexDesensitizationHandler regexDesensitizationHandler = new RegexDesensitizationHandler(); + + /** + * 脱敏注解Class列表 + */ + private final List> jsonDesensitizeAnnotationClasses = Arrays + .asList(JsonSimpleDesensitize.class, JsonRegexDesensitize.class, JsonSlideDesensitize.class); @Override public void serialize(String value, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException { - String type = jsonDesensitize.type(); - DesensitizationHandler desensitizationHandler = DesensitizationHandlerHolder.TYPE_MAPS.get(type); - Assert.notNull(desensitizationHandler, "DesensitizationHandler can not be Null"); - jsonGenerator.writeString(desensitizationHandler.handle(value)); + String str = value; + if (jsonDesensitizeAnnotation instanceof JsonSimpleDesensitize) { + // Simple 类型处理 + JsonSimpleDesensitize an = (JsonSimpleDesensitize) this.jsonDesensitizeAnnotation; + String type = an.type(); + SimpleDesensitizationHandler desensitizationHandler = SimpleDesensitizationHandlerHolder.TYPE_MAPS + .get(type); + Assert.notNull(desensitizationHandler, "SimpleDesensitizationHandler can not be Null"); + str = desensitizationHandler.handle(value); + } + else if (jsonDesensitizeAnnotation instanceof JsonRegexDesensitize) { + // 正则类型脱敏处理 + JsonRegexDesensitize an = (JsonRegexDesensitize) this.jsonDesensitizeAnnotation; + RegexDesensitizationTypeEnum type = an.type(); + str = RegexDesensitizationTypeEnum.CUSTOM.equals(type) + ? regexDesensitizationHandler.handle(value, an.regex(), an.replacement()) + : regexDesensitizationHandler.handle(value, type); + } + else if (jsonDesensitizeAnnotation instanceof JsonSlideDesensitize) { + // 滑动类型脱敏处理 + JsonSlideDesensitize an = (JsonSlideDesensitize) this.jsonDesensitizeAnnotation; + SlideDesensitizationTypeEnum type = an.type(); + str = SlideDesensitizationTypeEnum.CUSTOM.equals(type) ? slideDesensitizationHandler.handle(value, + an.leftPlainTextLen(), an.rightPlainTextLen(), an.maskString()) + : slideDesensitizationHandler.handle(value, type); + } + jsonGenerator.writeString(str); } @Override public JsonSerializer createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException { - if (beanProperty != null) { - if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) { - JsonDesensitize jsonDesensitize = beanProperty.getAnnotation(JsonDesensitize.class); - if (jsonDesensitize == null) { - jsonDesensitize = beanProperty.getContextAnnotation(JsonDesensitize.class); - } - if (jsonDesensitize != null) { - this.jsonDesensitize = jsonDesensitize; + if (beanProperty == null) { + return serializerProvider.findNullValueSerializer(null); + } + if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) { + for (Class annotationClass : jsonDesensitizeAnnotationClasses) { + Annotation annotation = getJsonDesensitizeAnnotation(beanProperty, annotationClass); + if (annotation != null) { + this.jsonDesensitizeAnnotation = annotation; return this; } } - return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty); } - return serializerProvider.findNullValueSerializer(null); + return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty); + } + + /** + * 根据注解Class查找BeanProperty上的指定注解 + * @param beanProperty beanProperty + * @param cls 注解Class + * @param 注解类型 + * @return 注解 + */ + private A getJsonDesensitizeAnnotation(BeanProperty beanProperty, Class cls) { + A jsonSimpleDesensitize = beanProperty.getAnnotation(cls); + if (jsonSimpleDesensitize == null) { + jsonSimpleDesensitize = beanProperty.getContextAnnotation(cls); + } + return jsonSimpleDesensitize; } } diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandlerHolder.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationHandlerHolder.java similarity index 50% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandlerHolder.java rename to ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationHandlerHolder.java index 47f7abfe..ed565788 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/DesensitizationHandlerHolder.java +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationHandlerHolder.java @@ -1,5 +1,7 @@ package com.hccake.ballcat.common.core.desensite; +import com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler; + import java.util.Map; import java.util.ServiceLoader; import java.util.concurrent.ConcurrentHashMap; @@ -10,14 +12,15 @@ import java.util.concurrent.ConcurrentHashMap; * @author Hccake 2021/1/22 * @version 1.0 */ -public class DesensitizationHandlerHolder { +public class SimpleDesensitizationHandlerHolder { - public final static Map TYPE_MAPS = new ConcurrentHashMap<>(); + public final static Map TYPE_MAPS = new ConcurrentHashMap<>(); static { // SPI 加载所有的脱敏类型处理 - ServiceLoader loadedDrivers = ServiceLoader.load(DesensitizationHandler.class); - for (DesensitizationHandler desensitizationHandler : loadedDrivers) { + ServiceLoader loadedDrivers = ServiceLoader + .load(SimpleDesensitizationHandler.class); + for (SimpleDesensitizationHandler desensitizationHandler : loadedDrivers) { TYPE_MAPS.put(desensitizationHandler.getType(), desensitizationHandler); } } diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationTypeConstant.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationTypeConstant.java new file mode 100644 index 00000000..0a6e9d76 --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/SimpleDesensitizationTypeConstant.java @@ -0,0 +1,22 @@ +package com.hccake.ballcat.common.core.desensite; + +import com.hccake.ballcat.common.core.desensite.handler.SixAsteriskDesensitizationHandler; + +/** + * 默认的一些脱敏方式 + * + * @author Hccake 2021/1/22 + * @version 1.0 + */ +public final class SimpleDesensitizationTypeConstant { + + private SimpleDesensitizationTypeConstant() { + } + + /** + * 定长脱敏,总是6个星号,不管原文是啥 + * @see SixAsteriskDesensitizationHandler + */ + public static final String SIX_ASTERISK = "FIXED_LENGTH"; + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonRegexDesensitize.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonRegexDesensitize.java new file mode 100644 index 00000000..922971d0 --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonRegexDesensitize.java @@ -0,0 +1,41 @@ +package com.hccake.ballcat.common.core.desensite.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.hccake.ballcat.common.core.desensite.JsonDesensitizeSerializer; +import com.hccake.ballcat.common.core.desensite.enums.RegexDesensitizationTypeEnum; +import com.hccake.ballcat.common.core.desensite.handler.RegexDesensitizationHandler; + +import java.lang.annotation.*; + +/** + * Jackson Filed 序列化脱敏注解, 对应使用正则脱敏处理器对值进行脱敏处理 + * @see RegexDesensitizationHandler + * @author Hccake 2021/1/22 + * @version 1.0 + */ +@Target({ ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@JacksonAnnotationsInside +@JsonSerialize(using = JsonDesensitizeSerializer.class) +public @interface JsonRegexDesensitize { + + /** + * 脱敏类型,用于指定正则处理方式。 只有当值为 CUSTOM 时,以下两个个参数才有效 + * @see RegexDesensitizationTypeEnum#CUSTOM + * @return type + */ + RegexDesensitizationTypeEnum type(); + + /** + * 匹配的正则表达式,只有当type值为 CUSTOM 时,才生效 + */ + String regex() default "^[\\s\\S]*$"; + + /** + * 替换规则,只有当type值为 CUSTOM 时,才生效 + */ + String replacement() default "******"; + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitize.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSimpleDesensitize.java similarity index 52% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitize.java rename to ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSimpleDesensitize.java index 3d556dc8..04b4bb30 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/JsonDesensitize.java +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSimpleDesensitize.java @@ -1,12 +1,15 @@ -package com.hccake.ballcat.common.core.desensite; +package com.hccake.ballcat.common.core.desensite.annotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.hccake.ballcat.common.core.desensite.JsonDesensitizeSerializer; +import com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler; import java.lang.annotation.*; /** - * Jackson Filed 序列化脱敏注解 + * Jackson Filed 序列化脱敏注解 使用脱敏处理器对值进行脱敏处理 + * @see SimpleDesensitizationHandler * @author Hccake 2021/1/22 * @version 1.0 */ @@ -15,11 +18,11 @@ import java.lang.annotation.*; @Documented @JacksonAnnotationsInside @JsonSerialize(using = JsonDesensitizeSerializer.class) -public @interface JsonDesensitize { +public @interface JsonSimpleDesensitize { /** * 脱敏类型,用于指定脱敏处理器 - * @see DesensitizationHandler#getType() + * @see SimpleDesensitizationHandler#getType() * @return type */ String type(); diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSlideDesensitize.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSlideDesensitize.java new file mode 100644 index 00000000..0381fd41 --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/annotation/JsonSlideDesensitize.java @@ -0,0 +1,46 @@ +package com.hccake.ballcat.common.core.desensite.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.hccake.ballcat.common.core.desensite.JsonDesensitizeSerializer; +import com.hccake.ballcat.common.core.desensite.enums.SlideDesensitizationTypeEnum; +import com.hccake.ballcat.common.core.desensite.handler.SlideDesensitizationHandler; + +import java.lang.annotation.*; + +/** + * Jackson Filed 序列化脱敏注解, 对应使用滑动脱敏处理器对值进行脱敏处理 + * @see SlideDesensitizationHandler + * @author Hccake 2021/1/22 + * @version 1.0 + */ +@Target({ ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@JacksonAnnotationsInside +@JsonSerialize(using = JsonDesensitizeSerializer.class) +public @interface JsonSlideDesensitize { + + /** + * 脱敏类型,只有当值为 CUSTOM 时,以下三个参数才有效 + * @see SlideDesensitizationTypeEnum#CUSTOM + * @return type + */ + SlideDesensitizationTypeEnum type(); + + /** + * 左边的明文数,只有当type值为 CUSTOM 时,才生效 + */ + int leftPlainTextLen() default 0; + + /** + * 右边的明文数,只有当type值为 CUSTOM 时,才生效 + */ + int rightPlainTextLen() default 0; + + /** + * 剩余部分字符逐个替换的字符串,只有当type值为 CUSTOM 时,才生效 + */ + String maskString() default "*"; + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/RegexDesensitizationTypeEnum.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/RegexDesensitizationTypeEnum.java new file mode 100644 index 00000000..a699f92b --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/RegexDesensitizationTypeEnum.java @@ -0,0 +1,39 @@ +package com.hccake.ballcat.common.core.desensite.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * @author Hccake 2021/1/23 + * @version 1.0 + */ +@Getter +@RequiredArgsConstructor +public enum RegexDesensitizationTypeEnum { + + /** + * 自定义类型 + */ + CUSTOM("^[\\s\\S]*$", "******"), + + /** + * 【邮箱】脱敏,保留邮箱第一个字符和'@'之后的原文显示,中间的显示为4个* eg. 12@qq.com -> 1****@qq.com + */ + EMAIL("(^.)[^@]*(@.*$)", "$1****$2"), + + /** + * 【对称密文的密码】脱敏,前3后2,中间替换为 4个 * + */ + ENCRYPTED_PASSWORD("(.{3}).*(.{2}$)", "$1****$2"); + + /** + * 匹配的正则表达式 + */ + private final String regex; + + /** + * 替换规则 + */ + private final String replacement; + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/SlideDesensitizationTypeEnum.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/SlideDesensitizationTypeEnum.java new file mode 100644 index 00000000..8b827482 --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/enums/SlideDesensitizationTypeEnum.java @@ -0,0 +1,54 @@ +package com.hccake.ballcat.common.core.desensite.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * @author Hccake 2021/1/23 + * @version 1.0 + */ +@Getter +@RequiredArgsConstructor +public enum SlideDesensitizationTypeEnum { + + /** + * 自定义类型 + */ + CUSTOM(0, 0, "*"), + + /** + * 全部字符替换为 * + */ + ALL_ASTERISK(0, 0, "*"), + + /** + * 【银行卡号】, 前6位和后4位不脱敏,中间脱敏 eg. 330150******1234 + */ + BANK_CARD_NO(6, 4, "*"), + + /** + * 【身份证号】年月日脱敏,前6后4不脱敏 eg. 655356*******1234 + */ + ID_CARD_NO(6, 4, "*"), + + /** + * 【手机号】,某些国家手机号位数短,所以不做前三后四,使用前三后二 + */ + PHONE_NUMBER(3, 2, "*"); + + /** + * 左边的明文数 + */ + private final int leftPlainTextLen; + + /** + * 右边的明文数 + */ + private final int rightPlainTextLen; + + /** + * 剩余部分字符逐个替换的字符串 + */ + private final String maskString; + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractCenterDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractCenterDesensitizationHandler.java deleted file mode 100644 index 0ddad5ff..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractCenterDesensitizationHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationHandler; -import lombok.Getter; - -/** - * 中间脱敏处理器类型,两边各展示部分明文数据 - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -@Getter -public abstract class AbstractCenterDesensitizationHandler implements DesensitizationHandler { - - private final String type; - - private final int leftPlainTextLen; - - private final int rightPlainTextLen; - - private final String maskString; - - public AbstractCenterDesensitizationHandler(String type, int leftPlainTextLen, int rightPlainTextLen) { - this(type, leftPlainTextLen, rightPlainTextLen, "*"); - } - - public AbstractCenterDesensitizationHandler(String type, int leftPlainTextLen, int rightPlainTextLen, - String maskString) { - this.type = type; - this.leftPlainTextLen = leftPlainTextLen; - this.rightPlainTextLen = rightPlainTextLen; - this.maskString = maskString; - } - - /** - * 脱敏处理 - * @param origin 原始字符串 - * @return 脱敏处理后的字符串 - */ - @Override - public String handle(String origin) { - if (origin == null) { - return null; - } - StringBuilder sb = new StringBuilder(); - - char[] chars = origin.toCharArray(); - int length = chars.length; - for (int i = 0; i < length; i++) { - // 明文位内则明文显示 - if (i < leftPlainTextLen || i > (length - rightPlainTextLen - 1)) { - sb.append(chars[i]); - } - else { - sb.append(maskString); - } - } - return sb.toString(); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractRegexDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractRegexDesensitizationHandler.java deleted file mode 100644 index 7f91c3f4..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AbstractRegexDesensitizationHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationHandler; -import lombok.Getter; - -/** - * 正则替换脱敏处理器类型 - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -@Getter -public abstract class AbstractRegexDesensitizationHandler implements DesensitizationHandler { - - private final String type; - - private final String regex; - - private final String replacement; - - public AbstractRegexDesensitizationHandler(String type, String regex, String replacement) { - this.type = type; - this.regex = regex; - this.replacement = replacement; - } - - /** - * 脱敏处理 - * @param origin 原始字符串 - * @return 脱敏处理后的字符串 - */ - @Override - public String handle(String origin) { - return origin.replaceAll(regex, replacement); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AllMaskDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AllMaskDesensitizationHandler.java deleted file mode 100644 index c8e12aac..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/AllMaskDesensitizationHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; - -/** - * 【全部】所有字符全部脱敏,保留原始位数不变 eg. 123456789 -> ********* - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -public class AllMaskDesensitizationHandler extends AbstractCenterDesensitizationHandler { - - public AllMaskDesensitizationHandler() { - super(DesensitizationTypeConstant.ALL_MASK, 0, 0); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/BankCardNODesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/BankCardNODesensitizationHandler.java deleted file mode 100644 index b9f8b8eb..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/BankCardNODesensitizationHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; - -/** - * 【银行卡号】, 前6位和后4位不脱敏,中间脱敏 eg. 330150******1234 - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -public class BankCardNODesensitizationHandler extends AbstractCenterDesensitizationHandler { - - public BankCardNODesensitizationHandler() { - super(DesensitizationTypeConstant.BANK_CARD_NO, 6, 4); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/DesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/DesensitizationHandler.java new file mode 100644 index 00000000..f27b0eab --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/DesensitizationHandler.java @@ -0,0 +1,11 @@ +package com.hccake.ballcat.common.core.desensite.handler; + +/** + * 脱敏处理器 + * + * @author Hccake 2021/1/22 + * @version 1.0 + */ +public interface DesensitizationHandler { + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EmailDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EmailDesensitizationHandler.java deleted file mode 100644 index dc0d6292..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EmailDesensitizationHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; - -/** - * 【邮箱】脱敏,保留邮箱第一个字符和'@'之后的原文显示,中间的显示为4个* eg. 12@qq.com -> 1****@qq.com - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -public class EmailDesensitizationHandler extends AbstractRegexDesensitizationHandler { - - public EmailDesensitizationHandler() { - super(DesensitizationTypeConstant.EMAIL, "(^\\w)[^@]*(@.*$)", "$1****$2"); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EncryptedPasswordDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EncryptedPasswordDesensitizationHandler.java deleted file mode 100644 index 55d49072..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/EncryptedPasswordDesensitizationHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; - -/** - * 【加密后的密码脱敏】 - * - * @author Hccake 2021/1/23 - * @version 1.0 - */ -public class EncryptedPasswordDesensitizationHandler extends AbstractCenterDesensitizationHandler { - - public EncryptedPasswordDesensitizationHandler() { - super(DesensitizationTypeConstant.ENCRYPTED_PASSWORD, 3, 2); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/IDCardNODesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/IDCardNODesensitizationHandler.java deleted file mode 100644 index 1c32c80b..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/IDCardNODesensitizationHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; - -/** - * 【身份证号】年月日脱敏,前6后4不脱敏 eg. 655356*******1234 - * - * @author Hccake 2021/1/22 - * @version 1.0 - */ -public class IDCardNODesensitizationHandler extends AbstractCenterDesensitizationHandler { - - public IDCardNODesensitizationHandler() { - super(DesensitizationTypeConstant.ID_CARD_NO, 6, 4); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/PhoneNumberDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/PhoneNumberDesensitizationHandler.java deleted file mode 100644 index 813bb2e3..00000000 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/PhoneNumberDesensitizationHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hccake.ballcat.common.core.desensite.handler; - -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; - -/** - * 【手机号】,某些国家手机号位数短,所以不做前三后四,使用前三后二 - * - * @author Hccake 2021/1/23 - * @version 1.0 - */ -public class PhoneNumberDesensitizationHandler extends AbstractCenterDesensitizationHandler { - - public PhoneNumberDesensitizationHandler() { - super(DesensitizationTypeConstant.PHONE_NUMBER, 3, 2); - } - -} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/RegexDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/RegexDesensitizationHandler.java new file mode 100644 index 00000000..c653d0b5 --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/RegexDesensitizationHandler.java @@ -0,0 +1,34 @@ +package com.hccake.ballcat.common.core.desensite.handler; + +import com.hccake.ballcat.common.core.desensite.enums.RegexDesensitizationTypeEnum; + +/** + * 正则替换脱敏处理器,使用正则匹配替换处理原数据 + * + * @author Hccake 2021/1/23 + * @version 1.0 + */ +public class RegexDesensitizationHandler implements DesensitizationHandler { + + /** + * 正则脱敏处理 + * @param origin 原文 + * @param regex 正则匹配规则 + * @param replacement 替换模板 + * @return 脱敏后的字符串 + */ + public String handle(String origin, String regex, String replacement) { + return origin.replaceAll(regex, replacement); + } + + /** + * 正则脱敏处理 + * @param origin 原文 + * @param typeEnum 正则脱敏枚举类型 + * @return 脱敏后的字符串 + */ + public String handle(String origin, RegexDesensitizationTypeEnum typeEnum) { + return origin.replaceAll(typeEnum.getRegex(), typeEnum.getReplacement()); + } + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SimpleDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SimpleDesensitizationHandler.java new file mode 100644 index 00000000..7419b1ba --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SimpleDesensitizationHandler.java @@ -0,0 +1,26 @@ +package com.hccake.ballcat.common.core.desensite.handler; + +import com.hccake.ballcat.common.core.desensite.handler.DesensitizationHandler; + +/** + * 简单的脱敏处理器,传入源数据直接返回脱敏后的数据 + * + * @author Hccake 2021/1/23 + * @version 1.0 + */ +public interface SimpleDesensitizationHandler extends DesensitizationHandler { + + /** + * 脱敏类型 + * @return 类型 + */ + String getType(); + + /** + * 脱敏处理 + * @param origin 原始字符串 + * @return 脱敏处理后的字符串 + */ + String handle(String origin); + +} diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/FixedLengthDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SixAsteriskDesensitizationHandler.java similarity index 51% rename from ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/FixedLengthDesensitizationHandler.java rename to ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SixAsteriskDesensitizationHandler.java index ecda7ce5..28507c43 100644 --- a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/FixedLengthDesensitizationHandler.java +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SixAsteriskDesensitizationHandler.java @@ -1,15 +1,14 @@ package com.hccake.ballcat.common.core.desensite.handler; -import com.hccake.ballcat.common.core.desensite.DesensitizationHandler; -import com.hccake.ballcat.common.core.desensite.DesensitizationTypeConstant; +import com.hccake.ballcat.common.core.desensite.SimpleDesensitizationTypeConstant; /** - * 【固定长度】,不管原文是什么,一律返回6个* eg. ****** + * 【6*脱敏】,不管原文是什么,一律返回6个* eg. ****** * * @author Hccake 2021/1/22 * @version 1.0 */ -public class FixedLengthDesensitizationHandler implements DesensitizationHandler { +public class SixAsteriskDesensitizationHandler implements SimpleDesensitizationHandler { /** * 脱敏类型 @@ -17,7 +16,7 @@ public class FixedLengthDesensitizationHandler implements DesensitizationHandler */ @Override public String getType() { - return DesensitizationTypeConstant.FIXED_LENGTH; + return SimpleDesensitizationTypeConstant.SIX_ASTERISK; } /** diff --git a/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SlideDesensitizationHandler.java b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SlideDesensitizationHandler.java new file mode 100644 index 00000000..7741535b --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/java/com/hccake/ballcat/common/core/desensite/handler/SlideDesensitizationHandler.java @@ -0,0 +1,51 @@ +package com.hccake.ballcat.common.core.desensite.handler; + +import com.hccake.ballcat.common.core.desensite.enums.SlideDesensitizationTypeEnum; + +/** + * 滑动脱敏处理器,根据左右边界值滑动左右指针,中间处脱敏 + * + * @author Hccake 2021/1/23 + * @version 1.0 + */ +public class SlideDesensitizationHandler implements DesensitizationHandler { + + /** + * 滑动脱敏 + * @param origin 原文 + * @param leftPlainTextLen 处理完后左边的明文数 + * @param rightPlainTextLen 处理完后右边的明文数 + * @param maskString 原文窗口内每个字符被替换后的字符串 + * @return 脱敏后的字符串 + */ + public String handle(String origin, int leftPlainTextLen, int rightPlainTextLen, String maskString) { + if (origin == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + + char[] chars = origin.toCharArray(); + int length = chars.length; + for (int i = 0; i < length; i++) { + // 明文位内则明文显示 + if (i < leftPlainTextLen || i > (length - rightPlainTextLen - 1)) { + sb.append(chars[i]); + } + else { + sb.append(maskString); + } + } + return sb.toString(); + } + + /** + * 根据指定枚举类型进行滑动脱敏 + * @param value 原文 + * @param type 滑动脱敏类型 + * @return 脱敏后的字符串 + */ + public String handle(String value, SlideDesensitizationTypeEnum type) { + return this.handle(value, type.getLeftPlainTextLen(), type.getRightPlainTextLen(), type.getMaskString()); + } + +} diff --git a/ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.DesensitizationHandler b/ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.DesensitizationHandler deleted file mode 100644 index 7b207dc0..00000000 --- a/ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.DesensitizationHandler +++ /dev/null @@ -1,7 +0,0 @@ -com.hccake.ballcat.common.core.desensite.handler.AllMaskDesensitizationHandler -com.hccake.ballcat.common.core.desensite.handler.BankCardNODesensitizationHandler -com.hccake.ballcat.common.core.desensite.handler.EmailDesensitizationHandler -com.hccake.ballcat.common.core.desensite.handler.EncryptedPasswordDesensitizationHandler -com.hccake.ballcat.common.core.desensite.handler.FixedLengthDesensitizationHandler -com.hccake.ballcat.common.core.desensite.handler.IDCardNODesensitizationHandler -com.hccake.ballcat.common.core.desensite.handler.PhoneNumberDesensitizationHandler \ No newline at end of file diff --git a/ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler b/ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler new file mode 100644 index 00000000..a4f530ff --- /dev/null +++ b/ballcat-common/ballcat-common-core/src/main/resources/META-INF/services/com.hccake.ballcat.common.core.desensite.handler.SimpleDesensitizationHandler @@ -0,0 +1 @@ +com.hccake.ballcat.common.core.desensite.handler.SixAsteriskDesensitizationHandler