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 package cn.iocoder.yudao.framework.desensitize.handler; 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 * @param origin 原始字符串 13 * @param origin 原始字符串
  14 + * @param arg 参数
12 * @return 脱敏后的字符串 15 * @return 脱敏后的字符串
13 */ 16 */
14 String desensitize(String origin, Object... arg); 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 package cn.iocoder.yudao.framework.desensitize.handler; 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 @Override 10 @Override
9 public String desensitize(String origin, Object... arg) { 11 public String desensitize(String origin, Object... arg) {
@@ -13,4 +15,9 @@ public class RegexDesensitizationHandler implements DesensitizationHandler { @@ -13,4 +15,9 @@ public class RegexDesensitizationHandler implements DesensitizationHandler {
13 return origin.replaceAll(regex, replacer); 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 package cn.iocoder.yudao.framework.desensitize.handler; 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 @Override 10 @Override
9 public String desensitize(String origin, Object... arg) { 11 public String desensitize(String origin, Object... arg) {
@@ -29,6 +31,11 @@ public class SliderDesensitizationHandler implements DesensitizationHandler { @@ -29,6 +31,11 @@ public class SliderDesensitizationHandler implements DesensitizationHandler {
29 origin.substring(prefixKeep + interval); 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,6 +18,7 @@ import com.fasterxml.jackson.databind.ser.ContextualSerializer;
18 import com.fasterxml.jackson.databind.ser.std.StdSerializer; 18 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
19 19
20 import java.io.IOException; 20 import java.io.IOException;
  21 +import java.lang.annotation.Annotation;
21 import java.lang.reflect.Field; 22 import java.lang.reflect.Field;
22 23
23 /** 24 /**
@@ -64,7 +65,7 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement @@ -64,7 +65,7 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
64 // 滑动处理器 65 // 滑动处理器
65 SliderDesensitize sliderDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, SliderDesensitize.class)); 66 SliderDesensitize sliderDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, SliderDesensitize.class));
66 if (sliderDesensitize != null) { 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 gen.writeString(value); 69 gen.writeString(value);
69 return; 70 return;
70 } 71 }
@@ -72,15 +73,24 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement @@ -72,15 +73,24 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
72 // 正则处理器 73 // 正则处理器
73 RegexDesensitize regexDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, RegexDesensitize.class)); 74 RegexDesensitize regexDesensitize = ArrayUtil.firstNonNull(AnnotationUtil.getCombinationAnnotations(field, RegexDesensitize.class));
74 if (regexDesensitize != null) { 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 gen.writeString(value); 77 gen.writeString(value);
77 return; 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 gen.writeString(value); 96 gen.writeString(value);