401 on request where `permitAll()` 指定
Posted
技术标签:
【中文标题】401 on request where `permitAll()` 指定【英文标题】:401 on request where `permitAll()` specified 【发布时间】:2021-09-02 16:03:55 【问题描述】:我有这个 WebSecurityConfigurerAdapter 配置:
@EnableWebSecurity
public class HttpSecurityConfig extends WebSecurityConfigurerAdapter
@Override
public void configure(HttpSecurity http) throws Exception
http.cors()
.and()
.authorizeRequests()
.mvcMatchers("/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2ResourceServer().jwt()
;
当我向auth
发出请求时,我得到一个 401,直到我通过了一些授权 - 这不适合这个 endopint。
我认为这与.anyRequest().authenticated()
有关。我之前读过这不应该影响permitAll()
s - 我是否配置错误?
【问题讨论】:
有没有返回401的路径示例 您是否使用 @EnableWebSecurity 注释了您的配置类? @AkifHadziabdic "POST /auth/test" @Nemanja 是的org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
【参考方案1】:
您的请求可能被拒绝,因为您没有提供CSRF token。默认情况下,Spring Security 会为每个 POST
请求启用它,您需要显式禁用它。
@EnableWebSecurity
public class HttpSecurityConfig extends WebSecurityConfigurerAdapter
@Override
public void configure(HttpSecurity http) throws Exception
http.cors()
.and()
.csrf().disable()
.authorizeRequests()
.mvcMatchers("/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2ResourceServer().jwt();
您可以将以下属性添加到您的 application.yml
文件中,这样您就可以看到如果 CSRF 不是这种情况,您的请求被拒绝的原因:
logging:
level:
org.springframework.security: TRACE
【讨论】:
这实际上是问题【参考方案2】:如果您使用的是 jwt 过滤器,即使您添加了 permitAll() 也无法正常工作。如果您删除过滤器,它将正常工作。
【讨论】:
我知道的唯一解决方法是忽略 HttpMethod.POST,因此所有使用 POST 方法的 url 都会被忽略。 你可以看看这个github.com/spring-projects/spring-security/issues/4368好像还有别的办法以上是关于401 on request where `permitAll()` 指定的主要内容,如果未能解决你的问题,请参考以下文章
Presto Max requests per destination 1024 exceeded for HttpDestination
错误记录Android Studio 配置 GitHub 报错 ( Can‘t login using given credentials: Request response: 401 Una )(代
错误记录Android Studio 配置 GitHub 报错 ( Can‘t login using given credentials: Request response: 401 Una )(代
springboot使用RestTemplate单元测试时,提示ResourceAccess I/O error on POST request for "http(转)