Эх сурвалжийг харах

【优化】数据脱敏支持 Spring el 表达式,支持根据权限控制脱敏

YunaiV 8 сар өмнө
parent
commit
7ba3b12313
24 өөрчлөгдсөн 81 нэмэгдсэн , 87 устгасан
  1. 3 4
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringExpressionUtils.java
  2. 19 0
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java
  3. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/EmailDesensitize.java
  4. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/RegexDesensitize.java
  5. 5 11
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java
  6. 2 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java
  7. 0 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java
  8. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/BankCardDesensitize.java
  9. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java
  10. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java
  11. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java
  12. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/IdCardDesensitize.java
  13. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/MobileDesensitize.java
  14. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/PasswordDesensitize.java
  15. 4 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/SliderDesensitize.java
  16. 5 11
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java
  17. 2 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/BankCardDesensitization.java
  18. 3 2
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java
  19. 0 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java
  20. 1 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java
  21. 1 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java
  22. 0 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/IdCardDesensitization.java
  23. 0 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/MobileDesensitization.java
  24. 0 5
      yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/PasswordDesensitization.java

+ 3 - 4
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringExpressionUtils.java

@@ -4,9 +4,9 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.beans.factory.BeanFactory;
 import org.springframework.context.expression.BeanFactoryResolver;
 import org.springframework.core.DefaultParameterNameDiscoverer;
 import org.springframework.core.ParameterNameDiscoverer;
@@ -93,17 +93,16 @@ public class SpringExpressionUtils {
     /**
      * 从 Bean 工厂,解析 EL 表达式的结果
      *
-     * @param beanFactory      Bean 工程
      * @param expressionString EL 表达式
      * @return 执行界面
      */
-    public static Object parseExpression(BeanFactory beanFactory, String expressionString) {
+    public static Object parseExpression(String expressionString) {
         if (StrUtil.isBlank(expressionString)) {
             return null;
         }
         Expression expression = EXPRESSION_PARSER.parseExpression(expressionString);
         StandardEvaluationContext context = new StandardEvaluationContext();
-        context.setBeanResolver(new BeanFactoryResolver(beanFactory));
+        context.setBeanResolver(new BeanFactoryResolver(SpringUtil.getApplicationContext()));
         return expression.getValue(context);
     }
 

+ 19 - 0
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java

@@ -1,5 +1,7 @@
 package cn.iocoder.yudao.framework.desensitize.core.base.handler;
 
+import cn.hutool.core.util.ReflectUtil;
+
 import java.lang.annotation.Annotation;
 
 /**
@@ -18,4 +20,21 @@ public interface DesensitizationHandler<T extends Annotation> {
      */
     String desensitize(String origin, T annotation);
 
+    /**
+     * 是否禁用脱敏的 Spring EL 表达式
+     *
+     * 如果返回 true 则跳过脱敏
+     *
+     * @param annotation 注解信息
+     * @return 是否禁用脱敏的 Spring EL 表达式
+     */
+    default String getDisable(T annotation) {
+        // 约定:默认就是 enable() 属性。如果不符合,子类重写
+        try {
+            return (String) ReflectUtil.invoke(annotation, "disable");
+        } catch (Exception ex) {
+            return "";
+        }
+    }
+
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/EmailDesensitize.java

@@ -35,8 +35,10 @@ public @interface EmailDesensitize {
     String replacer() default "$1****$2";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/RegexDesensitize.java

@@ -37,8 +37,10 @@ public @interface RegexDesensitize {
     String replacer() default "******";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 5 - 11
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.framework.desensitize.core.regex.handler;
 
-import cn.hutool.extra.spring.SpringUtil;
 import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils;
 import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
 
@@ -16,10 +15,13 @@ public abstract class AbstractRegexDesensitizationHandler<T extends Annotation>
 
     @Override
     public String desensitize(String origin, T annotation) {
-        Object expressionResult = SpringExpressionUtils.parseExpression(SpringUtil.getApplicationContext(), getCondition(annotation));
-        if (expressionResult instanceof Boolean && (Boolean) expressionResult) {
+        // 1. 判断是否禁用脱敏
+        Object disable = SpringExpressionUtils.parseExpression(getDisable(annotation));
+        if (Boolean.TRUE.equals(disable)) {
             return origin;
         }
+
+        // 2. 执行脱敏
         String regex = getRegex(annotation);
         String replacer = getReplacer(annotation);
         return origin.replaceAll(regex, replacer);
@@ -41,12 +43,4 @@ public abstract class AbstractRegexDesensitizationHandler<T extends Annotation>
      */
     abstract String getReplacer(T annotation);
 
-    /**
-     * el 表达式
-     *
-     * @param annotation 注解信息
-     * @return el 表达式
-     */
-    abstract String getCondition(T annotation);
-
 }

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java

@@ -20,8 +20,8 @@ public class DefaultRegexDesensitizationHandler extends AbstractRegexDesensitiza
     }
 
     @Override
-    String getCondition(RegexDesensitize annotation) {
-        return annotation.condition();
+    public String getDisable(RegexDesensitize annotation) {
+        return annotation.disable();
     }
 
 }

+ 0 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java

@@ -19,9 +19,4 @@ public class EmailDesensitizationHandler extends AbstractRegexDesensitizationHan
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(EmailDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/BankCardDesensitize.java

@@ -38,8 +38,10 @@ public @interface BankCardDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java

@@ -38,8 +38,10 @@ public @interface CarLicenseDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java

@@ -38,8 +38,10 @@ public @interface ChineseNameDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java

@@ -38,8 +38,10 @@ public @interface FixedPhoneDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/IdCardDesensitize.java

@@ -38,8 +38,10 @@ public @interface IdCardDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/MobileDesensitize.java

@@ -38,8 +38,10 @@ public @interface MobileDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/PasswordDesensitize.java

@@ -40,8 +40,10 @@ public @interface PasswordDesensitize {
     String replacer() default "*";
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 4 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/SliderDesensitize.java

@@ -42,8 +42,10 @@ public @interface SliderDesensitize {
     int prefixKeep() default 0;
 
     /**
-     * el 表达式,当执行 condition 返回 true 的时候,跳过脱敏
+     * 是否禁用脱敏
+     *
+     * 支持 Spring EL 表达式,如果返回 true 则跳过脱敏
      */
-    String condition() default "";
+    String disable() default "";
 
 }

+ 5 - 11
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.framework.desensitize.core.slider.handler;
 
-import cn.hutool.extra.spring.SpringUtil;
 import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils;
 import cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler;
 
@@ -16,10 +15,13 @@ public abstract class AbstractSliderDesensitizationHandler<T extends Annotation>
 
     @Override
     public String desensitize(String origin, T annotation) {
-        Object expressionResult = SpringExpressionUtils.parseExpression(SpringUtil.getApplicationContext(), getCondition(annotation));
-        if (expressionResult instanceof Boolean && (Boolean) expressionResult) {
+        // 1. 判断是否禁用脱敏
+        Object disable = SpringExpressionUtils.parseExpression(getDisable(annotation));
+        if (Boolean.FALSE.equals(disable)) {
             return origin;
         }
+
+        // 2. 执行脱敏
         int prefixKeep = getPrefixKeep(annotation);
         int suffixKeep = getSuffixKeep(annotation);
         String replacer = getReplacer(annotation);
@@ -81,12 +83,4 @@ public abstract class AbstractSliderDesensitizationHandler<T extends Annotation>
      */
     abstract String getReplacer(T annotation);
 
-    /**
-     * el 表达式
-     *
-     * @param annotation 注解信息
-     * @return el 表达式
-     */
-    abstract String getCondition(T annotation);
-
 }

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/BankCardDesensitization.java

@@ -25,8 +25,8 @@ public class BankCardDesensitization extends AbstractSliderDesensitizationHandle
     }
 
     @Override
-    String getCondition(BankCardDesensitize annotation) {
-        return annotation.condition();
+    public String getDisable(BankCardDesensitize annotation) {
+        return "";
     }
 
 }

+ 3 - 2
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java

@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.CarLicenseD
  * @author gaibu
  */
 public class CarLicenseDesensitization extends AbstractSliderDesensitizationHandler<CarLicenseDesensitize> {
+
     @Override
     Integer getPrefixKeep(CarLicenseDesensitize annotation) {
         return annotation.prefixKeep();
@@ -24,8 +25,8 @@ public class CarLicenseDesensitization extends AbstractSliderDesensitizationHand
     }
 
     @Override
-    String getCondition(CarLicenseDesensitize annotation) {
-        return annotation.condition();
+    public String getDisable(CarLicenseDesensitize annotation) {
+        return annotation.disable();
     }
 
 }

+ 0 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java

@@ -24,9 +24,4 @@ public class ChineseNameDesensitization extends AbstractSliderDesensitizationHan
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(ChineseNameDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }

+ 1 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java

@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.SliderDesen
  * @author gaibu
  */
 public class DefaultDesensitizationHandler extends AbstractSliderDesensitizationHandler<SliderDesensitize> {
+
     @Override
     Integer getPrefixKeep(SliderDesensitize annotation) {
         return annotation.prefixKeep();
@@ -23,9 +24,4 @@ public class DefaultDesensitizationHandler extends AbstractSliderDesensitization
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(SliderDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }

+ 1 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java

@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.desensitize.core.slider.annotation.FixedPhoneD
  * @author gaibu
  */
 public class FixedPhoneDesensitization extends AbstractSliderDesensitizationHandler<FixedPhoneDesensitize> {
+
     @Override
     Integer getPrefixKeep(FixedPhoneDesensitize annotation) {
         return annotation.prefixKeep();
@@ -23,9 +24,4 @@ public class FixedPhoneDesensitization extends AbstractSliderDesensitizationHand
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(FixedPhoneDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }

+ 0 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/IdCardDesensitization.java

@@ -23,9 +23,4 @@ public class IdCardDesensitization extends AbstractSliderDesensitizationHandler<
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(IdCardDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }

+ 0 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/MobileDesensitization.java

@@ -24,9 +24,4 @@ public class MobileDesensitization extends AbstractSliderDesensitizationHandler<
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(MobileDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }

+ 0 - 5
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/PasswordDesensitization.java

@@ -23,9 +23,4 @@ public class PasswordDesensitization extends AbstractSliderDesensitizationHandle
         return annotation.replacer();
     }
 
-    @Override
-    String getCondition(PasswordDesensitize annotation) {
-        return annotation.condition();
-    }
-
 }