Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

路由的匹配问题 #730

Open
yang-sir-86 opened this issue Jan 21, 2025 · 1 comment
Open

路由的匹配问题 #730

yang-sir-86 opened this issue Jan 21, 2025 · 1 comment

Comments

@yang-sir-86
Copy link

使用版本:

v1.39.0

涉及的功能模块:

网关的路由匹配

测试步骤:

  • 我经过以下步骤测试:

我的配置:

@Configuration
public class SaTokenConfigure {
    // 注册 Sa-Token全局过滤器 
    @Bean
    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
                // 拦截地址
                .addInclude("/**")    /* 拦截全部path */
                // 开放地址
                .addExclude("/favicon.ico")
                // 鉴权方法:每次访问进入
                .setAuth(obj -> {
                    System.out.println("---------- Sa-Token 全局过滤器 -----------");
                    System.out.println("path: " + SaHolder.getRequest().getRequestPath());
                    // 只拦截包含 login、admin 或 super 的路径
                    SaRouter.match("/auth/**")
                            .match("/**/login/**")
                            .check(r -> StpUtil.checkLogin());
                    SaRouter.match("/auth/**")
                            .match("/**/admin/**")
                            .check(r -> StpUtil.checkRole("Admin"));
                    SaRouter.match("/auth/**")
                            .match("/**/super/**")
                            .check(r -> StpUtil.checkRole("SuperAdmin"));
                })
    }
}

使用不同的路由访问:
路由1:http://{{BLOG_IP}}/blog/friends/public/pageList?page=1&pageSize=10
路由2:http://{{BLOG_IP}}/auth/user/super/getPageUser?page=1&pageSize=5

  • 得出以下结果:
    使用路由1就可以正常访问
    使用路由2访问的结果报错:
Caused by: org.springframework.web.util.pattern.PatternParseException: No more pattern data allowed after {*...} or ** pattern element
  • 我的理解是:
    不知道是不是我的配置问题
  1. 我认为这段代码应该是匹配以auth开头,而且中间含有login的会检查登录,如果最后check检查不通过,那么才会报错(而不是在match()代码报错.),
    如果路由不匹配,那么他应该继续向下运行,

  2. 在路由一可以正常访问说明match()这个函数应该不是匹配错误就会报错,但是如果我继续使用链式调用match(),比如示例中的SaRouter.match("/auth/**").match("/**/login/**"),如果第二个match不匹配就会报错.

  • 个人微不足道的建议:
    如果确实是这样设计的,那也就是说只有第一个match()函数是做匹配路由的,而后面的match类似于检查作用,匹配错误就会报错,个人认为应该让match中的路由匹配写法多一些,比如"/admin/**/login/**"

不知道是我的理解或配置问题,还是bug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants