Commit 61a34ddac5478887621d05cd7cf9c6019a62f27b

Authored by gaibu
1 parent 70f15ab6

feat: 支持 vo 返回的脱敏

yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/DesensitizationHandler.java
1 1 package cn.iocoder.yudao.framework.desensitize.handler;
2 2  
  3 +import java.lang.annotation.Annotation;
  4 +
3 5 /**
4 6 * 脱敏处理器接口
5 7 */
6   -public interface DesensitizationHandler {
  8 +public interface DesensitizationHandler<T extends Annotation> {
7 9  
8 10 /**
9 11 * 脱敏
10 12 *
11 13 * @param origin 原始字符串
  14 + * @param arg 参数
12 15 * @return 脱敏后的字符串
13 16 */
14 17 String desensitize(String origin, Object... arg);
15 18  
  19 + /**
  20 + * 获取注解参数
  21 + *
  22 + * @param anno 注解
  23 + * @return 注解参数
  24 + */
  25 + default Object[] getAnnotationArgs(T anno) {
  26 + return new Object[0];
  27 + }
16 28 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/RegexDesensitizationHandler.java
1 1 package cn.iocoder.yudao.framework.desensitize.handler;
2 2  
  3 +import cn.iocoder.yudao.framework.desensitize.annotation.RegexDesensitize;
  4 +
3 5 /**
4 6 * 正则脱敏处理器
5 7 */
6   -public class RegexDesensitizationHandler implements DesensitizationHandler {
  8 +public class RegexDesensitizationHandler implements DesensitizationHandler<RegexDesensitize> {
7 9  
8 10 @Override
9 11 public String desensitize(String origin, Object... arg) {
... ... @@ -13,4 +15,9 @@ public class RegexDesensitizationHandler implements DesensitizationHandler {
13 15 return origin.replaceAll(regex, replacer);
14 16 }
15 17  
  18 + @Override
  19 + public Object[] getAnnotationArgs(RegexDesensitize anno) {
  20 + return new Object[]{anno.regex(), anno.replacer()};
  21 + }
  22 +
16 23 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/handler/SliderDesensitizationHandler.java
1 1 package cn.iocoder.yudao.framework.desensitize.handler;
2 2  
  3 +import cn.iocoder.yudao.framework.desensitize.annotation.SliderDesensitize;
  4 +
3 5 /**
4 6 * 滑动脱敏处理器
5 7 */
6   -public class SliderDesensitizationHandler implements DesensitizationHandler {
  8 +public class SliderDesensitizationHandler implements DesensitizationHandler<SliderDesensitize> {
7 9  
8 10 @Override
9 11 public String desensitize(String origin, Object... arg) {
... ... @@ -29,6 +31,11 @@ public class SliderDesensitizationHandler implements DesensitizationHandler {
29 31 origin.substring(prefixKeep + interval);
30 32 }
31 33  
  34 + @Override
  35 + public Object[] getAnnotationArgs(SliderDesensitize anno) {
  36 + return new Object[]{anno.prefixKeep(), anno.suffixKeep(), anno.replacer()};
  37 + }
  38 +
32 39 /**
33 40 * 根据长度循环构建替换符
34 41 *
... ...
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/serializer/StringDesensitizeSerializer.java
... ... @@ -18,6 +18,7 @@ import com.fasterxml.jackson.databind.ser.ContextualSerializer;
18 18 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
19 19  
20 20 import java.io.IOException;
  21 +import java.lang.annotation.Annotation;
21 22 import java.lang.reflect.Field;
22 23  
23 24 /**
... ... @@ -64,7 +65,7 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
64 65 // 滑动处理器
65 66 SliderDesensitize sliderDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, SliderDesensitize.class));
66 67 if (sliderDesensitize != null) {
67   - value = this.desensitizationHandler.desensitize(value, sliderDesensitize.prefixKeep(), sliderDesensitize.suffixKeep(), sliderDesensitize.replacer());
  68 + value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(sliderDesensitize));
68 69 gen.writeString(value);
69 70 return;
70 71 }
... ... @@ -72,15 +73,24 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
72 73 // 正则处理器
73 74 RegexDesensitize regexDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, RegexDesensitize.class));
74 75 if (regexDesensitize != null) {
75   - value = this.desensitizationHandler.desensitize(value, regexDesensitize.regex(), regexDesensitize.replacer());
  76 + value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(regexDesensitize));
76 77 gen.writeString(value);
77 78 return;
78 79 }
79 80  
80 81 // 自定义处理器
81   - Desensitize desensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, Desensitize.class));
82   - if (desensitize != null) {
83   - value = this.desensitizationHandler.desensitize(value);
  82 + Desensitize[] annotations = AnnotationUtil.getCombinationAnnotations(field, Desensitize.class);
  83 + if (ArrayUtil.isEmpty(annotations)) {
  84 + gen.writeString(value);
  85 + return;
  86 + }
  87 +
  88 + for (Annotation annotation : field.getAnnotations()) {
  89 + if (AnnotationUtil.hasAnnotation(annotation.annotationType(), Desensitize.class)) {
  90 + value = this.desensitizationHandler.desensitize(value, this.desensitizationHandler.getAnnotationArgs(annotation));
  91 + gen.writeString(value);
  92 + return;
  93 + }
84 94 }
85 95  
86 96 gen.writeString(value);
... ...