Commit c60f8d6da293fadf36ffd7fd0ddbb0793beca99b

Authored by gaibu
1 parent 61a34dda

feat: 支持 vo 返回的脱敏

Showing 28 changed files with 365 additions and 143 deletions
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/DesensitizationHandlerHolder.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/DesensitizationHandlerHolder.java
1   -package cn.iocoder.yudao.framework.desensitize.handler;
  1 +package cn.iocoder.yudao.framework.desensitize.core.base;
2 2  
3 3 import cn.hutool.core.util.ReflectUtil;
  4 +import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
  5 +import cn.iocoder.yudao.framework.desensitize.core.regex.handler.DefaultRegexDesensitizationHandler;
  6 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.DefaultDesensitizationHandler;
4 7  
5 8 import java.util.Map;
6 9 import java.util.concurrent.ConcurrentHashMap;
... ... @@ -13,8 +16,8 @@ public class DesensitizationHandlerHolder {
13 16 * handler 缓存,默认初始化内置的处理器
14 17 */
15 18 private static final Map<Class<? extends DesensitizationHandler>, DesensitizationHandler> HANDLER_MAP = new ConcurrentHashMap<>() {{
16   - put(RegexDesensitizationHandler.class, new RegexDesensitizationHandler());
17   - put(SliderDesensitizationHandler.class, new SliderDesensitizationHandler());
  19 + put(DefaultRegexDesensitizationHandler.class, new DefaultRegexDesensitizationHandler());
  20 + put(DefaultDesensitizationHandler.class, new DefaultDesensitizationHandler());
18 21 }};
19 22  
20 23 public static DesensitizationHandler getDesensitizationHandler(Class<? extends DesensitizationHandler> clazz) {
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/Desensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/annotation/Desensitize.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation;
  1 +package cn.iocoder.yudao.framework.desensitize.core.base.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.handler.DesensitizationHandler;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
4 4 import cn.iocoder.yudao.framework.desensitize.serializer.StringDesensitizeSerializer;
5 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
6 6 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
... ... @@ -16,7 +16,7 @@ import java.lang.annotation.Target;
16 16 * Desensitize 顶级脱敏注解
17 17 */
18 18 @Documented
19   -@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
  19 +@Target({ ElementType.ANNOTATION_TYPE})
20 20 @Retention(RetentionPolicy.RUNTIME)
21 21 @JacksonAnnotationsInside
22 22 @JsonSerialize(using = StringDesensitizeSerializer.class)
... ... @@ -25,6 +25,5 @@ public @interface Desensitize {
25 25 /**
26 26 * 脱敏处理器
27 27 */
28   - Class<? extends DesensitizationHandler> desensitizationHandler();
29   -
  28 + Class<? extends DesensitizationHandler> desensitizationBy();
30 29 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/DesensitizationHandler.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java
1   -package cn.iocoder.yudao.framework.desensitize.handler;
  1 +package cn.iocoder.yudao.framework.desensitize.core.base.handler;
2 2  
3 3 import java.lang.annotation.Annotation;
4 4  
... ... @@ -11,18 +11,9 @@ public interface DesensitizationHandler&lt;T extends Annotation&gt; {
11 11 * 脱敏
12 12 *
13 13 * @param origin 原始字符串
14   - * @param arg 参数
  14 + * @param anno 注解信息
15 15 * @return 脱敏后的字符串
16 16 */
17   - String desensitize(String origin, Object... arg);
  17 + String desensitize(String origin, T anno);
18 18  
19   - /**
20   - * 获取注解参数
21   - *
22   - * @param anno 注解
23   - * @return 注解参数
24   - */
25   - default Object[] getAnnotationArgs(T anno) {
26   - return new Object[0];
27   - }
28 19 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/EmailDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/EmailDesensitize.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.regex.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.RegexDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.regex.handler.EmailDesensitizationHandler;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,18 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@RegexDesensitize(regex = "(^.)[^@]*(@.*$)", replacer ="$1****$2") // 邮箱;比如:example@gmail.com脱敏之后为e****@gmail.com
  20 +@Desensitize(desensitizationBy = EmailDesensitizationHandler.class) // 邮箱;比如:example@gmail.com脱敏之后为e****@gmail.com
20 21 public @interface EmailDesensitize {
  22 + /**
  23 + * 匹配的正则表达式(默认匹配所有)
  24 + */
  25 + String regex() default "(^.)[^@]*(@.*$)";
  26 +
  27 + /**
  28 + * 替换规则,会将匹配到的字符串全部替换成 replacer
  29 + * 例如:regex=123; replacer=******
  30 + * 原始字符串 123456789
  31 + * 脱敏后字符串 ******456789
  32 + */
  33 + String replacer() default "$1****$2";
21 34 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/RegexDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/RegexDesensitize.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation;
  1 +package cn.iocoder.yudao.framework.desensitize.core.regex.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.handler.RegexDesensitizationHandler;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.regex.handler.DefaultRegexDesensitizationHandler;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,7 +17,7 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@Desensitize(desensitizationHandler = RegexDesensitizationHandler.class)
  20 +@Desensitize(desensitizationBy = DefaultRegexDesensitizationHandler.class)
20 21 public @interface RegexDesensitize {
21 22 /**
22 23 * 匹配的正则表达式(默认匹配所有)
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
  4 +
  5 +import java.lang.annotation.Annotation;
  6 +
  7 +public abstract class AbstractRegexDesensitizationHandler<T extends Annotation> implements DesensitizationHandler<T> {
  8 +
  9 + @Override
  10 + public String desensitize(String origin, T anno) {
  11 + Object[] args = getArgs(anno);
  12 + String regex = (String) args[0];
  13 + String replacer = (String) args[1];
  14 +
  15 + return origin.replaceAll(regex, replacer);
  16 + }
  17 +
  18 + /**
  19 + * 获取注解的参数
  20 + *
  21 + * @param anno 注解信息
  22 + * @return 注解的参数
  23 + */
  24 + abstract Object[] getArgs(T anno);
  25 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.regex.annotation.RegexDesensitize;
  4 +
  5 +/**
  6 + * 正则脱敏处理器
  7 + */
  8 +public class DefaultRegexDesensitizationHandler extends AbstractRegexDesensitizationHandler<RegexDesensitize> {
  9 +
  10 + @Override
  11 + Object[] getArgs(RegexDesensitize anno) {
  12 + return new Object[]{anno.regex(), anno.replacer()};
  13 + }
  14 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.regex.annotation.EmailDesensitize;
  4 +
  5 +public class EmailDesensitizationHandler extends AbstractRegexDesensitizationHandler<EmailDesensitize> {
  6 +
  7 + @Override
  8 + Object[] getArgs(EmailDesensitize anno) {
  9 + return new Object[]{anno.regex(), anno.replacer()};
  10 + }
  11 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/BankCardDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/BankCard.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.BankCardDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 6, suffixKeep = 2, replacer = "*") // 银行卡号;比如:9988002866797031脱敏之后为998800********31
20   -public @interface BankCardDesensitize {
  20 +@Desensitize(desensitizationBy = BankCardDesensitization.class)// 银行卡号;比如:9988002866797031脱敏之后为998800********31
  21 +public @interface BankCard {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 6;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 2;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/CarLicenseDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/CarLicense.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.CarLicenseDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 3, suffixKeep = 1, replacer = "*") // 车牌号;比如:粤A66666脱敏之后为粤A6***6
20   -public @interface CarLicenseDesensitize {
  20 +@Desensitize(desensitizationBy = CarLicenseDesensitization.class) // 车牌号;比如:粤A66666脱敏之后为粤A6***6
  21 +public @interface CarLicense {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 3;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 1;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/ChineseNameDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/ChineseName.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.ChineseNameDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 1, suffixKeep = 0, replacer = "*") // 中文名;比如:刘子豪脱敏之后为刘**
20   -public @interface ChineseNameDesensitize {
  20 +@Desensitize(desensitizationBy = ChineseNameDesensitization.class) // 中文名;比如:刘子豪脱敏之后为刘**
  21 +public @interface ChineseName {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 1;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 0;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/FixedPhoneDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/FixedPhone.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.FixedPhoneDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 4, suffixKeep = 2, replacer = "*") // 固定电话;比如:01086551122脱敏之后为0108*****22
20   -public @interface FixedPhoneDesensitize {
  20 +@Desensitize(desensitizationBy = FixedPhoneDesensitization.class) // 固定电话;比如:01086551122脱敏之后为0108*****22
  21 +public @interface FixedPhone {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 4;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 2;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/IdCardDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/IdCard.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.IdCardDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 6, suffixKeep = 2, replacer = "*") // 身份证号码;比如:530321199204074611脱敏之后为530321**********11
20   -public @interface IdCardDesensitize {
  20 +@Desensitize(desensitizationBy = IdCardDesensitization.class) // 身份证号码;比如:530321199204074611脱敏之后为530321**********11
  21 +public @interface IdCard {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 6;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 2;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/PasswordDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/Password.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.PasswordDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 0, suffixKeep = 0, replacer = "*") // 密码;比如:123456脱敏之后为******
20   -public @interface PasswordDesensitize {
  20 +@Desensitize(desensitizationBy = PasswordDesensitization.class) // 密码;比如:123456脱敏之后为******
  21 +public @interface Password {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 0;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 0;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/constraints/PhoneNumberDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/PhoneNumber.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation.constraints;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.PhoneNumberDesensitization;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,6 +17,25 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@SliderDesensitize(prefixKeep = 3, suffixKeep = 4, replacer = "*") // 手机号;比如:13248765917脱敏之后为132****5917
20   -public @interface PhoneNumberDesensitize {
  20 +@Desensitize(desensitizationBy = PhoneNumberDesensitization.class) // 手机号;比如:13248765917脱敏之后为132****5917
  21 +public @interface PhoneNumber {
  22 +
  23 + /**
  24 + * 前缀保留长度
  25 + */
  26 + int prefixKeep() default 3;
  27 +
  28 + /**
  29 + * 后缀保留长度
  30 + */
  31 + int suffixKeep() default 4;
  32 +
  33 + /**
  34 + * 替换规则,会将前缀后缀保留后,全部替换成 replacer
  35 + * 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
  36 + * 原始字符串 123456
  37 + * 脱敏后 1***56
  38 + */
  39 + String replacer() default "*";
  40 +
21 41 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/annotation/SliderDesensitize.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/Slider.java
1   -package cn.iocoder.yudao.framework.desensitize.annotation;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.annotation;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.handler.SliderDesensitizationHandler;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  4 +import cn.iocoder.yudao.framework.desensitize.core.slider.handler.DefaultDesensitizationHandler;
4 5 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
5 6  
6 7 import java.lang.annotation.Documented;
... ... @@ -16,8 +17,8 @@ import java.lang.annotation.Target;
16 17 @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
17 18 @Retention(RetentionPolicy.RUNTIME)
18 19 @JacksonAnnotationsInside
19   -@Desensitize(desensitizationHandler = SliderDesensitizationHandler.class)
20   -public @interface SliderDesensitize {
  20 +@Desensitize(desensitizationBy = DefaultDesensitizationHandler.class)
  21 +public @interface Slider {
21 22  
22 23 /**
23 24 * 后缀保留长度
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/SliderDesensitizationHandler.java renamed to yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractDesensitizationHandler.java
1   -package cn.iocoder.yudao.framework.desensitize.handler;
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
2 2  
3   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  3 +import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
4 4  
5   -/**
6   - * 滑动脱敏处理器
7   - */
8   -public class SliderDesensitizationHandler implements DesensitizationHandler<SliderDesensitize> {
  5 +import java.lang.annotation.Annotation;
  6 +
  7 +public abstract class AbstractDesensitizationHandler<T extends Annotation> implements DesensitizationHandler<T> {
9 8  
10 9 @Override
11   - public String desensitize(String origin, Object... arg) {
12   - int prefixKeep = (Integer) arg[0];
13   - int suffixKeep = (Integer) arg[1];
14   - String replacer = (String) arg[2];
  10 + public String desensitize(String origin, T anno) {
  11 + Object[] args = getArgs(anno);
  12 + int prefixKeep = (Integer) args[0];
  13 + int suffixKeep = (Integer) args[1];
  14 + String replacer = (String) args[2];
15 15  
16 16 int length = origin.length();
17 17  
... ... @@ -31,10 +31,13 @@ public class SliderDesensitizationHandler implements DesensitizationHandler&lt;Slid
31 31 origin.substring(prefixKeep + interval);
32 32 }
33 33  
34   - @Override
35   - public Object[] getAnnotationArgs(SliderDesensitize anno) {
36   - return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
37   - }
  34 + /**
  35 + * 获取注解的参数
  36 + *
  37 + * @param anno 注解信息
  38 + * @return 注解的参数
  39 + */
  40 + abstract Object[] getArgs(T anno);
38 41  
39 42 /**
40 43 * 根据长度循环构建替换符
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/BankCardDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.BankCard;
  4 +
  5 +public class BankCardDesensitization extends AbstractDesensitizationHandler<BankCard> {
  6 +
  7 + @Override
  8 + Object[] getArgs(BankCard anno) {
  9 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  10 + }
  11 +}
0 12 \ No newline at end of file
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.CarLicense;
  4 +
  5 +public class CarLicenseDesensitization extends AbstractDesensitizationHandler<CarLicense> {
  6 + @Override
  7 + Object[] getArgs(CarLicense anno) {
  8 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  9 + }
  10 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.ChineseName;
  4 +
  5 +public class ChineseNameDesensitization extends AbstractDesensitizationHandler<ChineseName> {
  6 + @Override
  7 + Object[] getArgs(ChineseName anno) {
  8 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  9 + }
  10 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.Slider;
  4 +
  5 +/**
  6 + * 滑动脱敏处理器
  7 + */
  8 +public class DefaultDesensitizationHandler extends AbstractDesensitizationHandler<Slider> {
  9 +
  10 + @Override
  11 + Object[] getArgs(Slider anno) {
  12 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  13 + }
  14 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.FixedPhone;
  4 +
  5 +public class FixedPhoneDesensitization extends AbstractDesensitizationHandler<FixedPhone> {
  6 + @Override
  7 + Object[] getArgs(FixedPhone anno) {
  8 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  9 + }
  10 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/IdCardDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.IdCard;
  4 +
  5 +public class IdCardDesensitization extends AbstractDesensitizationHandler<IdCard> {
  6 + @Override
  7 + Object[] getArgs(IdCard anno) {
  8 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  9 + }
  10 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/PasswordDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.Password;
  4 +
  5 +public class PasswordDesensitization extends AbstractDesensitizationHandler<Password> {
  6 + @Override
  7 + Object[] getArgs(Password anno) {
  8 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  9 + }
  10 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/PhoneNumberDesensitization.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
  2 +
  3 +import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.PhoneNumber;
  4 +
  5 +public class PhoneNumberDesensitization extends AbstractDesensitizationHandler<PhoneNumber> {
  6 +
  7 + @Override
  8 + Object[] getArgs(PhoneNumber anno) {
  9 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  10 + }
  11 +}
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/RegexDesensitizationHandler.java deleted
1   -package cn.iocoder.yudao.framework.desensitize.handler;
2   -
3   -import cn.iocoder.yudao.framework.desensitize.annotation.RegexDesensitize;
4   -
5   -/**
6   - * 正则脱敏处理器
7   - */
8   -public class RegexDesensitizationHandler implements DesensitizationHandler<RegexDesensitize> {
9   -
10   - @Override
11   - public String desensitize(String origin, Object... arg) {
12   - String regex = (String) arg[0];
13   - String replacer = (String) arg[1];
14   -
15   - return origin.replaceAll(regex, replacer);
16   - }
17   -
18   - @Override
19   - public Object[] getAnnotationArgs(RegexDesensitize anno) {
20   - return new Object[]{anno.regex(), anno.replacer()};
21   - }
22   -
23   -}
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/serializer/StringDesensitizeSerializer.java
... ... @@ -4,11 +4,9 @@ import cn.hutool.core.annotation.AnnotationUtil;
4 4 import cn.hutool.core.util.ArrayUtil;
5 5 import cn.hutool.core.util.ReflectUtil;
6 6 import cn.hutool.core.util.StrUtil;
7   -import cn.iocoder.yudao.framework.desensitize.annotation.Desensitize;
8   -import cn.iocoder.yudao.framework.desensitize.annotation.RegexDesensitize;
9   -import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
10   -import cn.iocoder.yudao.framework.desensitize.handler.DesensitizationHandler;
11   -import cn.iocoder.yudao.framework.desensitize.handler.DesensitizationHandlerHolder;
  7 +import cn.iocoder.yudao.framework.desensitize.core.base.annotation.Desensitize;
  8 +import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
  9 +import cn.iocoder.yudao.framework.desensitize.core.base.DesensitizationHandlerHolder;
12 10 import com.fasterxml.jackson.core.JsonGenerator;
13 11 import com.fasterxml.jackson.databind.BeanProperty;
14 12 import com.fasterxml.jackson.databind.JsonMappingException;
... ... @@ -46,7 +44,7 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
46 44 return this;
47 45 }
48 46 StringDesensitizeSerializer serializer = new StringDesensitizeSerializer();
49   - serializer.setDesensitizationHandler(DesensitizationHandlerHolder.getDesensitizationHandler(annotation.desensitizationHandler()));
  47 + serializer.setDesensitizationHandler(DesensitizationHandlerHolder.getDesensitizationHandler(annotation.desensitizationBy()));
50 48 return serializer;
51 49 }
52 50  
... ... @@ -62,22 +60,6 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
62 60 Class<?> currentValueClass = currentValue.getClass();
63 61 Field field = ReflectUtil.getField(currentValueClass, currentName);
64 62  
65   - // 滑动处理器
66   - SliderDesensitize sliderDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, SliderDesensitize.class));
67   - if (sliderDesensitize != null) {
68   - value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(sliderDesensitize));
69   - gen.writeString(value);
70   - return;
71   - }
72   -
73   - // 正则处理器
74   - RegexDesensitize regexDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, RegexDesensitize.class));
75   - if (regexDesensitize != null) {
76   - value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(regexDesensitize));
77   - gen.writeString(value);
78   - return;
79   - }
80   -
81 63 // 自定义处理器
82 64 Desensitize[] annotations = AnnotationUtil.getCombinationAnnotations(field, Desensitize.class);
83 65 if (ArrayUtil.isEmpty(annotations)) {
... ... @@ -86,8 +68,9 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
86 68 }
87 69  
88 70 for (Annotation annotation : field.getAnnotations()) {
  71 +
89 72 if (AnnotationUtil.hasAnnotation(annotation.annotationType(), Desensitize.class)) {
90   - value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(annotation));
  73 + value = this.desensitizationHandler.desensitize(value, annotation);
91 74 gen.writeString(value);
92 75 return;
93 76 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/test/java/cn/iocoder/yudao/framework/desensitize/handler/DesensitizationHandlerTest.java deleted
1   -package cn.iocoder.yudao.framework.desensitize.handler;
2   -
3   -import org.junit.jupiter.api.Assertions;
4   -import org.junit.jupiter.api.Test;
5   -
6   -public class DesensitizationHandlerTest {
7   -
8   - @Test
9   - public void testSliderDesensitizationHandler() {
10   - DesensitizationHandler handler = DesensitizationHandlerHolder.getDesensitizationHandler(SliderDesensitizationHandler.class);
11   -
12   - Assertions.assertEquals("A****FG", handler.desensitize("ABCDEFG", 1, 2, "*"));
13   - Assertions.assertEquals("芋**码", handler.desensitize("芋道源码", 1, 1, "*"));
14   - Assertions.assertEquals("****", handler.desensitize("芋道源码", 4, 0, "*"));
15   - }
16   -
17   - @Test
18   - public void testRegexDesensitizationHandler() {
19   - DesensitizationHandler handler = DesensitizationHandlerHolder.getDesensitizationHandler(RegexDesensitizationHandler.class);
20   -
21   - Assertions.assertEquals("e****@gmail.com", handler.desensitize("example@gmail.com", "(^.)[^@]*(@.*$)", "$1****$2"));
22   - Assertions.assertEquals("***,铁***", handler.desensitize("他妈的,铁废物", "他妈的|去你大爷|卧槽|草泥马|废物", "***"));
23   - }
24   -
25   -}