ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/ExcludeUrlProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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 { } 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(() -> { // æ£æ¥æ¯å¦ç»å½ æ¯å¦ætoken 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; /** * 设置注解å 许å¿å访é®çurl * * @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)); }); }); }); } } ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java
ÎļþÒÑɾ³ý