Commit 32d7d6ab2975f11e8d31ad4f7407a3023c7061df

Authored by YunaiV
1 parent e5ab9b71

code review 脱敏组件的代码

yudao-framework/yudao-spring-boot-starter-biz-desensitize/pom.xml
@@ -9,8 +9,11 @@ @@ -9,8 +9,11 @@
9 <version>${revision}</version> 9 <version>${revision}</version>
10 </parent> 10 </parent>
11 11
  12 + <!-- TODO 城:yudao-spring-boot-starter-biz-desensitize =》yudao-spring-boot-starter-desensitize,不属于业务哈 -->
12 <artifactId>yudao-spring-boot-starter-biz-desensitize</artifactId> 13 <artifactId>yudao-spring-boot-starter-biz-desensitize</artifactId>
  14 + <!-- TODO 城:这个组件的说明; -->
13 15
  16 + <!-- TODO 城:这里去掉哈 -->
14 <properties> 17 <properties>
15 <maven.compiler.source>11</maven.compiler.source> 18 <maven.compiler.source>11</maven.compiler.source>
16 <maven.compiler.target>11</maven.compiler.target> 19 <maven.compiler.target>11</maven.compiler.target>
@@ -40,4 +43,4 @@ @@ -40,4 +43,4 @@
40 <scope>test</scope> 43 <scope>test</scope>
41 </dependency> 44 </dependency>
42 </dependencies> 45 </dependencies>
43 -</project>  
44 \ No newline at end of file 46 \ No newline at end of file
  47 +</project>
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/DesensitizationHandlerHolder.java
@@ -8,14 +8,17 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.handler.DefaultDesensi @@ -8,14 +8,17 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.handler.DefaultDesensi
8 import java.util.Map; 8 import java.util.Map;
9 import java.util.concurrent.ConcurrentHashMap; 9 import java.util.concurrent.ConcurrentHashMap;
10 10
  11 +// TODO @城:DesensitizationHandlerHolder =》 DesensitizationHandlerFactory? Holder 没有太多工厂的味道哈
11 /** 12 /**
12 * 脱敏处理器 Holder 13 * 脱敏处理器 Holder
13 */ 14 */
14 public class DesensitizationHandlerHolder { 15 public class DesensitizationHandlerHolder {
  16 +
15 /** 17 /**
16 * handler 缓存,默认初始化内置的处理器 18 * handler 缓存,默认初始化内置的处理器
17 */ 19 */
18 private static final Map<Class<? extends DesensitizationHandler>, DesensitizationHandler> HANDLER_MAP = new ConcurrentHashMap<>() {{ 20 private static final Map<Class<? extends DesensitizationHandler>, DesensitizationHandler> HANDLER_MAP = new ConcurrentHashMap<>() {{
  21 + // TODO @城:这 2 个,是不是不用呀?需要的时候初始化
19 put(DefaultRegexDesensitizationHandler.class, new DefaultRegexDesensitizationHandler()); 22 put(DefaultRegexDesensitizationHandler.class, new DefaultRegexDesensitizationHandler());
20 put(DefaultDesensitizationHandler.class, new DefaultDesensitizationHandler()); 23 put(DefaultDesensitizationHandler.class, new DefaultDesensitizationHandler());
21 }}; 24 }};
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/annotation/Desensitize.java
@@ -11,19 +11,21 @@ import java.lang.annotation.Retention; @@ -11,19 +11,21 @@ import java.lang.annotation.Retention;
11 import java.lang.annotation.RetentionPolicy; 11 import java.lang.annotation.RetentionPolicy;
12 import java.lang.annotation.Target; 12 import java.lang.annotation.Target;
13 13
14 - 14 +// TODO @城:每个接口上,author 写下哈。
  15 +// TODO @城:Desensitize = 》DesensitizeBy
  16 +// TODO @城:Desensitize 类注释,方便读者阅读理解
15 /** 17 /**
16 * Desensitize 顶级脱敏注解 18 * Desensitize 顶级脱敏注解
17 */ 19 */
18 @Documented 20 @Documented
19 -@Target({ ElementType.ANNOTATION_TYPE}) 21 +@Target(ElementType.ANNOTATION_TYPE)
20 @Retention(RetentionPolicy.RUNTIME) 22 @Retention(RetentionPolicy.RUNTIME)
21 -@JacksonAnnotationsInside  
22 -@JsonSerialize(using = StringDesensitizeSerializer.class) 23 +@JacksonAnnotationsInside // TODO @城:这个的作用,也可以写下
  24 +@JsonSerialize(using = StringDesensitizeSerializer.class) // TODO @城:这个的作用,也可以写下
23 public @interface Desensitize { 25 public @interface Desensitize {
24 26
25 /** 27 /**
26 * 脱敏处理器 28 * 脱敏处理器
27 */ 29 */
28 - Class<? extends DesensitizationHandler> desensitizationBy(); 30 + Class<? extends DesensitizationHandler> desensitizationBy(); // TODO @城:desensitizationBy -> handler
29 } 31 }
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java
@@ -11,7 +11,7 @@ public interface DesensitizationHandler&lt;T extends Annotation&gt; { @@ -11,7 +11,7 @@ public interface DesensitizationHandler&lt;T extends Annotation&gt; {
11 * 脱敏 11 * 脱敏
12 * 12 *
13 * @param origin 原始字符串 13 * @param origin 原始字符串
14 - * @param anno 注解信息 14 + * @param anno 注解信息 // TODO 不要这样的缩写哈,anno -> annotation
15 * @return 脱敏后的字符串 15 * @return 脱敏后的字符串
16 */ 16 */
17 String desensitize(String origin, T anno); 17 String desensitize(String origin, T anno);
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java
@@ -15,6 +15,8 @@ public abstract class AbstractRegexDesensitizationHandler&lt;T extends Annotation&gt; @@ -15,6 +15,8 @@ public abstract class AbstractRegexDesensitizationHandler&lt;T extends Annotation&gt;
15 return origin.replaceAll(regex, replacer); 15 return origin.replaceAll(regex, replacer);
16 } 16 }
17 17
  18 + // TODO @城:是不是抽象两个方法,一个拿 regex;一个拿 replacer
  19 +
18 /** 20 /**
19 * 获取注解的参数 21 * 获取注解的参数
20 * 22 *
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractDesensitizationHandler.java
@@ -12,25 +12,26 @@ public abstract class AbstractDesensitizationHandler&lt;T extends Annotation&gt; imple @@ -12,25 +12,26 @@ public abstract class AbstractDesensitizationHandler&lt;T extends Annotation&gt; imple
12 int prefixKeep = (Integer) args[0]; 12 int prefixKeep = (Integer) args[0];
13 int suffixKeep = (Integer) args[1]; 13 int suffixKeep = (Integer) args[1];
14 String replacer = (String) args[2]; 14 String replacer = (String) args[2];
15 -  
16 int length = origin.length(); 15 int length = origin.length();
17 16
18 - // 原始字符串长度小于等于保留长度,则原始字符串全部替换 17 + // 情况一:原始字符串长度小于等于保留长度,则原始字符串全部替换
19 if (prefixKeep >= length || suffixKeep >= length) { 18 if (prefixKeep >= length || suffixKeep >= length) {
20 return buildReplacerByLength(replacer, length); 19 return buildReplacerByLength(replacer, length);
21 } 20 }
22 21
23 - // 如果原始字符串小于等于前后缀保留字符串长度,则原始字符串全部替换 22 + // 情况二:如果原始字符串小于等于前后缀保留字符串长度,则原始字符串全部替换
24 if ((prefixKeep + suffixKeep) >= length) { 23 if ((prefixKeep + suffixKeep) >= length) {
25 return buildReplacerByLength(replacer, length); 24 return buildReplacerByLength(replacer, length);
26 } 25 }
27 26
  27 + // 情况三:TODO 城
28 int interval = length - prefixKeep - suffixKeep; 28 int interval = length - prefixKeep - suffixKeep;
29 return origin.substring(0, prefixKeep) + 29 return origin.substring(0, prefixKeep) +
30 buildReplacerByLength(replacer, interval) + 30 buildReplacerByLength(replacer, interval) +
31 origin.substring(prefixKeep + interval); 31 origin.substring(prefixKeep + interval);
32 } 32 }
33 33
  34 + // TODO @城:类似,子类直接获取到参数哈
34 /** 35 /**
35 * 获取注解的参数 36 * 获取注解的参数
36 * 37 *
@@ -49,4 +50,5 @@ public abstract class AbstractDesensitizationHandler&lt;T extends Annotation&gt; imple @@ -49,4 +50,5 @@ public abstract class AbstractDesensitizationHandler&lt;T extends Annotation&gt; imple
49 private String buildReplacerByLength(String replacer, int length) { 50 private String buildReplacerByLength(String replacer, int length) {
50 return String.valueOf(replacer).repeat(Math.max(0, length)); 51 return String.valueOf(replacer).repeat(Math.max(0, length));
51 } 52 }
  53 +
52 } 54 }
yudao-framework/yudao-spring-boot-starter-biz-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/serializer/StringDesensitizeSerializer.java
@@ -19,16 +19,19 @@ import java.io.IOException; @@ -19,16 +19,19 @@ import java.io.IOException;
19 import java.lang.annotation.Annotation; 19 import java.lang.annotation.Annotation;
20 import java.lang.reflect.Field; 20 import java.lang.reflect.Field;
21 21
  22 +// TODO @城:挪到 base/serializer 包下
22 /** 23 /**
23 * 脱敏序列化器 24 * 脱敏序列化器
24 */ 25 */
25 public class StringDesensitizeSerializer extends StdSerializer<String> implements ContextualSerializer { 26 public class StringDesensitizeSerializer extends StdSerializer<String> implements ContextualSerializer {
  27 +
26 private DesensitizationHandler desensitizationHandler; 28 private DesensitizationHandler desensitizationHandler;
27 29
28 protected StringDesensitizeSerializer() { 30 protected StringDesensitizeSerializer() {
29 super(String.class); 31 super(String.class);
30 } 32 }
31 33
  34 + // TODO @城:get 和 set 方法是必须的么?如果是的话,可以换成 lombok 注解哈,简洁一点~
32 public DesensitizationHandler getDesensitizationHandler() { 35 public DesensitizationHandler getDesensitizationHandler() {
33 return desensitizationHandler; 36 return desensitizationHandler;
34 } 37 }
@@ -55,6 +58,7 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement @@ -55,6 +58,7 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
55 return; 58 return;
56 } 59 }
57 60
  61 + // TODO @城:抽个 private getField 方法。让这个方法的逻辑主干,更清晰
58 String currentName = gen.getOutputContext().getCurrentName(); 62 String currentName = gen.getOutputContext().getCurrentName();
59 Object currentValue = gen.getCurrentValue(); 63 Object currentValue = gen.getCurrentValue();
60 Class<?> currentValueClass = currentValue.getClass(); 64 Class<?> currentValueClass = currentValue.getClass();
@@ -66,16 +70,13 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement @@ -66,16 +70,13 @@ public class StringDesensitizeSerializer extends StdSerializer&lt;String&gt; implement
66 gen.writeString(value); 70 gen.writeString(value);
67 return; 71 return;
68 } 72 }
69 -  
70 for (Annotation annotation : field.getAnnotations()) { 73 for (Annotation annotation : field.getAnnotations()) {
71 -  
72 if (AnnotationUtil.hasAnnotation(annotation.annotationType(), Desensitize.class)) { 74 if (AnnotationUtil.hasAnnotation(annotation.annotationType(), Desensitize.class)) {
73 value = this.desensitizationHandler.desensitize(value, annotation); 75 value = this.desensitizationHandler.desensitize(value, annotation);
74 gen.writeString(value); 76 gen.writeString(value);
75 return; 77 return;
76 } 78 }
77 } 79 }
78 -  
79 gen.writeString(value); 80 gen.writeString(value);
80 } 81 }
81 82