我已使用以下http配置配置了我的资源服务器。基本上我想设置像许可少数请求而无需身份验证的配置,只有当用户拥有有效的访问令牌时才应允许我未指定的所有其他请求。
请注意,我使用的是spring security oauth2和spring boot。
@Override
public void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.and()
.csrf()
.requireCsrfProtectionMatcher(new AntPathRequestMatcher("/oauth/authorize"))
.disable()
.headers()
.frameOptions().disable().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.antMatcher("**")
.authorizeRequests()
.antMatchers("/hello/")
.permitAll()
.anyRequest()
.authenticated();
}
当我尝试访问http://localhost:8889/hello
时,即使我使用permitAll配置了它,它仍然给出了401 UnAuthorized响应
{
"error": "unauthorized",
"error_description": "An Authentication object was not found in the SecurityContext"
}
相反,我检查了以下配置
.authorizeRequests()
.antMatchers("/hello/").permitAll()
.antMatchers("/hello2/").permitAll()
.antMatchers("/secure/**").authenticated()
.antMatchers("/secure2/**").authenticated();
它好像hello一样,在没有令牌的情况下允许hello2,如果不传递令牌或传递无效令牌,secure和secure2会给出错误响应。
有人可以告诉我我错过了什么吗?