Spring Boot配置全请求放行仍报Unauthorized,POST请求异常求助
我来帮你搞定这个问题!你的配置里有个容易被忽略的点——启用了httpBasic(),这会让Spring Security默认开启HTTP基本认证校验,哪怕你设置了permitAll(),POST请求还是会触发认证检查,导致返回401 Unauthorized。
修复步骤
只需要禁用HTTP基本认证,或者干脆移除http.httpBasic()这部分配置就行,修改后的完整配置如下:
@Override protected void configure(HttpSecurity http) throws Exception { // 禁用HTTP基本认证,避免不必要的拦截 http.httpBasic().disable() .authorizeRequests() .antMatchers("/**").permitAll() // 放行所有请求,无需认证 .and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()); // 保留CSRF Token在Cookie中,允许前端读取 }
补充说明
为什么这样改?
当你启用httpBasic()后,Spring Security的HTTP基本认证过滤器会优先于授权规则生效,哪怕你配置了permitAll(),它还是会尝试校验请求的认证信息,没有的话就返回401。禁用后,授权规则会正常生效,所有请求都能被放行。CSRF Token的注意事项
你的CSRF配置是正确的,CookieCsrfTokenRepository.withHttpOnlyFalse()会把CSRF Token存在可被前端读取的Cookie里。如果是前端发起POST请求,需要把这个Token放到请求头X-XSRF-TOKEN中,否则会返回403 Forbidden(注意这和你遇到的401是不同的问题)。排查其他可能性
如果修改后还是有问题,可以检查是否存在其他Security配置类冲突,或者项目中是否有自定义的过滤器拦截了请求。
内容的提问来源于stack exchange,提问作者lau
相关产品推荐
相关产品推荐

