Spring Security:antMatcher 的序列未按预期工作 [重复]

Posted

技术标签:

【中文标题】Spring Security:antMatcher 的序列未按预期工作 [重复]【英文标题】:Spring Security: sequanece of antMatcher not working as expected [duplicate] 【发布时间】:2020-11-18 03:09:23 【问题描述】:

我有 REST API,我希望使用 Spring Security 来保护它们 -

override fun configure(http: HttpSecurity?) 
        http?.authorizeRequests()
                ?.antMatchers("/podcast/**")?.hasRole("admin")
                ?.antMatchers(HttpMethod.GET, "/podcast/details/**")?.permitAll()
                ?.antMatchers("/")?.permitAll()
                ?.and()
                ?.formLogin()
    

?.antMatchers("/podcast/**")?.hasRole("admin") 正在工作,但是, 当我尝试访问 http://localhost:8080/podcast/details/all API 时,?.antMatchers(HttpMethod.GET, "/podcast/details/**")?.permitAll() 会被完全忽略。

但是,当我像这样反转模式检查时 -

override fun configure(http: HttpSecurity?) 
        http?.authorizeRequests()
                ?.antMatchers(HttpMethod.GET, "/podcast/details/**")?.permitAll()
                ?.antMatchers("/podcast/**")?.hasRole("admin")
                ?.antMatchers("/")?.permitAll()
                ?.and()
                ?.formLogin()
    

它按预期工作。

我相信最严格的模式必须是第一位的,但上述案例证明并非如此。我错过了什么?

【问题讨论】:

【参考方案1】:

当您首先说更严格的模式时,这与权限无关。它是关于哪些 url 模式更具体。 所以/podcast/details/**/podcast/** 更具体

即当您收到请求 /podcast/details/123 时,它将按照您定义的顺序进行 url 匹配。所以如果你把/podcast/**放在第一位,它会匹配它而不检查其余的

【讨论】:

以上是关于Spring Security:antMatcher 的序列未按预期工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 在运行时动态添加/删除 antMatchers 和角色

Spring security antMatcher 未按预期工作

Spring Security:antMatcher 的序列未按预期工作 [重复]

Spring Security:所有端点返回状态 200 并且对约束没有响应作为 antMatchers

Spring security antMatchers permitAll 不起作用

使用 AngularJS 和 Spring Security 的单页应用程序中需要 AntMatchers