Commit 61a34ddac5478887621d05cd7cf9c6019a62f27b
1 parent
70f15ab6
feat: 支持 vo 返回的脱敏
Showing
4 changed files
with
44 additions
and
8 deletions
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<String> implement | @@ -64,7 +65,7 @@ public class StringDesensitizeSerializer extends StdSerializer<String> 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<String> implement | @@ -72,15 +73,24 @@ public class StringDesensitizeSerializer extends StdSerializer<String> 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); |