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