From 51593aafb27e6ff9dc9d3920708de3c72a47c900 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期六, 28 五月 2022 23:10:45 +0800
Subject: [PATCH] update 支持注解配置匿名访问

---
 /dev/null                                                                                     |   72 ------------------------
 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java                         |   37 ++++++------
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java                   |    4 +
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ExcludeUrlProperties.java |   61 ++++++++++++++++++++
 4 files changed, 83 insertions(+), 91 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java
index 8b6966e..fe28100 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java
@@ -1,19 +1,18 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�
- * 
- * @author ruoyi
- */
-@Target({ ElementType.METHOD, ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Anonymous
-{
-}
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�
+ *
+ * @author ruoyi
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Anonymous {
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java
index a07494b..4c76f1e 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java
@@ -7,6 +7,8 @@
 import cn.dev33.satoken.stp.StpLogic;
 import cn.dev33.satoken.stp.StpUtil;
 import com.ruoyi.common.helper.LoginHelper;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.framework.config.properties.ExcludeUrlProperties;
 import com.ruoyi.framework.config.properties.SecurityProperties;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -37,12 +39,14 @@
     public void addInterceptors(InterceptorRegistry registry) {
         // 娉ㄥ唽璺敱鎷︽埅鍣紝鑷畾涔夐獙璇佽鍒�
         registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> {
+            ExcludeUrlProperties excludeUrlProperties = SpringUtils.getBean(ExcludeUrlProperties.class);
             // 鐧诲綍楠岃瘉 -- 鎺掗櫎澶氫釜璺緞
             SaRouter
                 // 鑾峰彇鎵�鏈夌殑
                 .match("/**")
                 // 鎺掗櫎涓嬩笉闇�瑕佹嫤鎴殑
                 .notMatch(securityProperties.getExcludes())
+                .notMatch(excludeUrlProperties.getExcludes())
                 // 瀵规湭鎺掗櫎鐨勮矾寰勮繘琛屾鏌�
                 .check(() -> {
                     // 妫�鏌ユ槸鍚︾櫥褰� 鏄惁鏈塼oken
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ExcludeUrlProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ExcludeUrlProperties.java
new file mode 100644
index 0000000..b4e3eae
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ExcludeUrlProperties.java
@@ -0,0 +1,61 @@
+package com.ruoyi.framework.config.properties;
+
+import cn.hutool.core.util.ReUtil;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import lombok.Getter;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+
+import java.util.*;
+import java.util.regex.Pattern;
+
+/**
+ * 璁剧疆娉ㄨВ鍏佽鍖垮悕璁块棶鐨剈rl
+ *
+ * @author Lion Li
+ */
+@Lazy
+@Component
+public class ExcludeUrlProperties implements InitializingBean {
+
+    private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
+
+    @Getter
+    private final List<String> excludes = new ArrayList<>();
+
+    @Override
+    public void afterPropertiesSet() {
+        String asterisk = "*";
+        RequestMappingHandlerMapping mapping = SpringUtils.getBean(RequestMappingHandlerMapping.class);
+        Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
+
+        map.keySet().forEach(info -> {
+            HandlerMethod handlerMethod = map.get(info);
+
+            // 鑾峰彇鏂规硶涓婅竟鐨勬敞瑙� 鏇夸唬path variable 涓� *
+            Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class);
+            Optional.ofNullable(method).ifPresent(anonymous -> {
+                Set<String> patterns = info.getPatternsCondition().getPatterns();
+                patterns.forEach(url -> {
+                    excludes.add(ReUtil.replaceAll(url, PATTERN, asterisk));
+                });
+            });
+
+            // 鑾峰彇绫讳笂杈圭殑娉ㄨВ, 鏇夸唬path variable 涓� *
+            Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class);
+            Optional.ofNullable(controller).ifPresent(anonymous -> {
+                Set<String> patterns = info.getPatternsCondition().getPatterns();
+                patterns.forEach(url -> {
+                    excludes.add(ReUtil.replaceAll(url, PATTERN, asterisk));
+                });
+            });
+        });
+    }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java
deleted file mode 100644
index 7acd0ab..0000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.ruoyi.framework.config.properties;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.regex.Pattern;
-import org.apache.commons.lang3.RegExUtils;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.AnnotationUtils;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
-import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
-import com.ruoyi.common.annotation.Anonymous;
-
-/**
- * 璁剧疆Anonymous娉ㄨВ鍏佽鍖垮悕璁块棶鐨剈rl
- * 
- * @author ruoyi
- */
-@Configuration
-public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware
-{
-    private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
-
-    private ApplicationContext applicationContext;
-
-    private List<String> urls = new ArrayList<>();
-
-    public String ASTERISK = "*";
-
-    @Override
-    public void afterPropertiesSet()
-    {
-        RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
-        Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
-
-        map.keySet().forEach(info -> {
-            HandlerMethod handlerMethod = map.get(info);
-
-            // 鑾峰彇鏂规硶涓婅竟鐨勬敞瑙� 鏇夸唬path variable 涓� *
-            Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class);
-            Optional.ofNullable(method).ifPresent(anonymous -> info.getPatternsCondition().getPatterns()
-                    .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))));
-
-            // 鑾峰彇绫讳笂杈圭殑娉ㄨВ, 鏇夸唬path variable 涓� *
-            Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class);
-            Optional.ofNullable(controller).ifPresent(anonymous -> info.getPatternsCondition().getPatterns()
-                    .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))));
-        });
-    }
-
-    @Override
-    public void setApplicationContext(ApplicationContext context) throws BeansException
-    {
-        this.applicationContext = context;
-    }
-
-    public List<String> getUrls()
-    {
-        return urls;
-    }
-
-    public void setUrls(List<String> urls)
-    {
-        this.urls = urls;
-    }
-}

--
Gitblit v1.9.3