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

已设置authorizeHttpRequests为permitAll,为何仅POST请求返回403?

解决Spring Security下POST请求403 Forbidden问题

问题原因

你的Spring Security配置虽然放开了所有请求的权限,但Spring Security默认启用了CSRF(跨站请求伪造)防护机制。对于POST、PUT、DELETE这类非安全HTTP方法,框架会要求请求携带有效的CSRF令牌,否则直接返回403禁止访问。而GET请求属于安全方法,默认不会触发CSRF验证,因此可以正常访问。


解决方案

方案一:临时关闭CSRF防护(测试环境适用)

修改ApplicationConfig配置类,在安全过滤链中添加csrf().disable()来关闭CSRF防护:

@Configuration
@EnableWebSecurity
public class ApplicationConfig{
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .csrf().disable() // 关闭CSRF防护
            .authorizeHttpRequests((authz)-> authz.anyRequest().permitAll());
        return http.build();
    }
}

修改后重启服务,再用以下命令测试POST请求(注意指定内容类型,匹配@RequestBody的解析要求):

curl -X POST http://localhost:8080/kafka -d "Hello World" -H "Content-Type: text/plain"

方案二:携带CSRF令牌(生产环境推荐)

生产环境不建议关闭CSRF防护,需要在请求中正确携带CSRF令牌:

  1. 先通过GET请求获取CSRF令牌,Spring Security会在响应Cookie中设置XSRF-TOKEN:
curl -c cookie.txt http://localhost:8080/kafka
  1. 从Cookie文件中提取令牌,再携带令牌发送POST请求:
TOKEN=$(grep XSRF-TOKEN cookie.txt | awk '{print $7}')
curl -X POST http://localhost:8080/kafka -d "Hello World" -H "Content-Type: text/plain" -b cookie.txt -H "X-XSRF-TOKEN: $TOKEN"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:43:10