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 | 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<String> 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<String> 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); | ... | ... |