You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security配置Basic Auth POST请求403 关闭CSRF认证失效解决方法

问题原因

当你自定义SecurityFilterChain Bean后,Spring Security默认的自动装配逻辑会直接失效——包括读取application.properties中配置的默认账号密码、默认的HTTP Basic认证拦截规则都不会再生效。你之前的配置仅做了跨域放行、CSRF关闭,没有显式配置请求鉴权规则和Basic认证逻辑,因此所有接口可以被匿名直接访问。

正确配置方案

不需要删除application.properties中已配置的spring.security.user.name和spring.security.user.password参数,只需要修改WebSecurityConfig类,在关闭CSRF的同时显式声明请求授权规则、开启HTTP Basic认证即可。
修正后的配置代码如下:

import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.context.annotation.Bean;

@EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .cors().and()
            // 关闭CSRF:纯后端API服务、前后端分离场景可直接关闭;如果是服务端渲染表单页面,建议保留CSRF并在POST请求中携带合法CSRF Token
            .csrf().disable()
            // 配置所有请求都需要完成认证才可访问
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            // 显式开启HTTP Basic认证,会自动读取配置文件中的默认账号密码
            .httpBasic(Customizer.withDefaults());

        return http.build();
    }
}

注:上述写法兼容Spring Boot 2.x、Spring Boot 3.x版本,3.x版本中必须引入Customizer类完成配置。

替代方案说明
  • 如果你不想自定义SecurityFilterChain,可以直接删除你写的WebSecurityConfig类,在发起POST请求时携带框架生成的合法CSRF Token,即可避免403错误。但对于非浏览器调用的API服务来说,关闭CSRF是行业通用做法,维护成本更低。
  • 你也可以选择删除application.properties中的静态账号配置,在配置类中自定义UserDetailsService Bean实现动态用户校验,不影响上述Basic Auth配置的生效逻辑。

内容的提问来源于stack exchange,提问作者iank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:39:15