Spring Security - 只允许带有前缀的请求

Posted

技术标签:

【中文标题】Spring Security - 只允许带有前缀的请求【英文标题】:Spring Security - permit only requests with prefix 【发布时间】:2020-06-10 16:13:07 【问题描述】:

除了以/unsecured 开头的端点外,我需要保护资源服务器中的所有其余端点。因此,应该允许所有人提出以下请求:

/unsecured/foo/bar /unsecured ...

但是这样的请求:

/foo/unsecured/bar /foo/bar ...

应该需要身份验证。

@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter 

    @Override
    public void configure(HttpSecurity security) throws Exception 
        security
            .authorizeRequests(authorizeRequests -> 
                authorizeRequests.antMatchers("unsecured/**").permitAll();
                authorizeRequests.anyRequest().authenticated();
            );
    

但在上面的配置中,所有端点都需要身份验证。

这是我尝试访问不安全端点时收到的响应:

代码 401


    "error": "unauthorized",
    "error_description": "Full authentication is required to access this resource"

【问题讨论】:

你不想authorizeRequests.antMatchers("unsecured/**").permitAll(); @AlanHay 是的,很抱歉,我只是抄错了我的代码。谢谢。 【参考方案1】:

premitAll() 是您正在寻找的。看起来您只是缺少 URL 之前的 /

@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter 
    @Override
    public void configure(HttpSecurity security) throws Exception 
        security
            .authorizeRequests(authorizeRequests - > 
                authorizeRequests.antMatchers("/unsecured/**").permitAll();
                authorizeRequests.anyRequest().authenticated();
            );
    

【讨论】:

真的很抱歉。我不好复制我的代码。我已经在第一行有 permitAll()。 也许您需要在不安全之前使用“/”? 是的,它有效,但很奇怪。谢谢你。您可以更新答案,我会将其标记为答案

以上是关于Spring Security - 只允许带有前缀的请求的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Security 的 Cors

Spring Security 不允许资源,登录浏览器后只显示一个 css 文件?

Spring Security入门(3-6)Spring Security 的鉴权 - 自定义权限前缀

不再需要 Spring Security ROLE_ 前缀?

Spring Security Jwt 令牌在请求表单角度时允许所有选项方法

Spring Security - permitAll() 不允许未经身份验证的访问