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 不允许资源,登录浏览器后只显示一个 css 文件?
Spring Security入门(3-6)Spring Security 的鉴权 - 自定义权限前缀
不再需要 Spring Security ROLE_ 前缀?