diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 1534251f8..d87088d1b 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -128,8 +128,10 @@ security: - /**/*.html - /**/*.css - /**/*.js - # swagger 文档配置 + # 公共路径 - /favicon.ico + - /error + # swagger 文档配置 - /*/api-docs - /*/api-docs/** # actuator 监控配置 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 40eb87c4c..b45eace4b 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,7 +7,9 @@ import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpInterface; import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpUtil; +import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.config.properties.SecurityProperties; +import com.ruoyi.framework.handler.AllUrlHandler; import com.ruoyi.framework.satoken.dao.PlusSaTokenDao; import com.ruoyi.framework.satoken.service.SaPermissionImpl; import lombok.RequiredArgsConstructor; @@ -36,10 +38,11 @@ public class SaTokenConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { // 注册路由拦截器,自定义验证规则 registry.addInterceptor(new SaInterceptor(handler -> { + AllUrlHandler allUrlHandler = SpringUtils.getBean(AllUrlHandler.class); // 登录验证 -- 排除多个路径 SaRouter // 获取所有的 - .match("/**") + .match(allUrlHandler.getUrls()) // 对未排除的路径进行检查 .check(() -> { // 检查是否登录 是否有token diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/AllUrlHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/AllUrlHandler.java new file mode 100644 index 000000000..4ec0919a8 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/AllUrlHandler.java @@ -0,0 +1,43 @@ +package com.ruoyi.framework.handler; + +import cn.hutool.core.util.ReUtil; +import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.Data; +import org.springframework.beans.factory.InitializingBean; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; + +/** + * 获取所有Url配置 + * + * @author Lion Li + */ +@Data +public class AllUrlHandler implements InitializingBean { + + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); + + private List urls = new ArrayList<>(); + + @Override + public void afterPropertiesSet() { + RequestMappingHandlerMapping mapping = SpringUtils.getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + map.keySet().forEach(info -> { + // 获取方法上边的注解 替代path variable 为 * + Objects.requireNonNull(info.getPathPatternsCondition().getPatterns()) + .forEach(url -> urls.add(ReUtil.replaceAll(url.getPatternString(), PATTERN, "*"))); + // 获取类上边的注解, 替代path variable 为 * + Objects.requireNonNull(info.getPathPatternsCondition().getPatterns()) + .forEach(url -> urls.add(ReUtil.replaceAll(url.getPatternString(), PATTERN, "*"))); + }); + } + +}