为包含路径变量的 url 禁用 spring 安全性 [重复]

Posted

技术标签:

【中文标题】为包含路径变量的 url 禁用 spring 安全性 [重复]【英文标题】:Disable spring security for url containing a path variable [duplicate] 【发布时间】:2019-12-09 18:59:45 【问题描述】:

我工作的项目有spring securityantMatcher实现如下:

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()

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

【问题讨论】:

【参考方案1】:

您需要切换行以便将最具体的规则放在首位:

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

这是因为第一个匹配项(按照声明的顺序)是使用的匹配项。

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

【讨论】:

以上是关于为包含路径变量的 url 禁用 spring 安全性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 禁用从某个 url 发出的请求的安全性

Spring Boot:为执行器端点禁用 https

如何在Spring启动应用程序中进行REST调用而不在Spring安全性中禁用CSRF保护?

如何在自定义反序列化器 Spring Boot 中读取路径变量或 URL 参数

Spring Boot:禁用安全自动配置

使用 spring SecurityWebFilterChain 如何禁用/阻止除少数已知路径外的所有非 https 请求