首页 > 解决方案 > 为包含路径变量的 url 禁用 spring 安全性

问题描述

我正在工作的项目的弹簧安全antMatcher实施如下:

http.authorizeRequests()
    .antMatchers("/v1/users/**").authenticated()
    .antMatchers(HttpMethod.POST, "/v1/users/*/do").permitAll()

当我尝试访问时,/v1/users/2/do我收到一个未经授权的错误,但我希望它可以访问,因为我在 URL 模式中添加了“permitAll()”。

我努力了:

.antMatchers(HttpMethod.POST, "/v1/users/{id}/do").permitAll()

我仍然获得未经授权的访问。

标签: javaspring-bootspring-security

解决方案


您需要切换行以便首先放置最具体的规则:

http.authorizeRequests()
    .antMatchers(HttpMethod.POST, "/v1/users/*/do").permitAll()
    .antMatchers("/v1/users/**").authenticated()

这是因为第一个匹配项(以它们声明的相同顺序)是使用的匹配项。

由于您首先拥有最一般的规则,因此这是考虑的规则,忽略下一个可能的匹配项(并禁止请求)。


推荐阅读