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