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,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<T extends Annotation> { | @@ -11,7 +11,7 @@ public interface DesensitizationHandler<T extends Annotation> { | ||
| 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<T extends Annotation> | @@ -15,6 +15,8 @@ public abstract class AbstractRegexDesensitizationHandler<T extends Annotation> | ||
| 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<T extends Annotation> imple | @@ -12,25 +12,26 @@ public abstract class AbstractDesensitizationHandler<T extends Annotation> 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<T extends Annotation> imple | @@ -49,4 +50,5 @@ public abstract class AbstractDesensitizationHandler<T extends Annotation> 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<String> implement | @@ -55,6 +58,7 @@ public class StringDesensitizeSerializer extends StdSerializer<String> 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<String> implement | @@ -66,16 +70,13 @@ public class StringDesensitizeSerializer extends StdSerializer<String> 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 |