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