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

Spring Security 6.0中Axios POST请求报403,Postman正常

React+Axios调用Spring Security认证接口返回403(POST请求失败,GET正常)

问题背景

  • 服务器:Spring Boot(localhost:8080),前端:React.js + Axios(localhost:3000)
  • Postman调用/api/v1/auth/authenticate POST接口可正常生成JWT令牌,但前端Axios发送同接口POST请求返回403错误,GET请求(如/api/v1/auth/hi)可正常响应
  • 已配置CORS但问题未解决

可能原因及修复方案

1. CSRF保护拦截POST请求

Spring Security默认启用CSRF保护,会拦截未携带CSRF令牌的POST/PUT/DELETE请求。Postman测试时因未触发会话初始化流程,CSRF校验未生效;但前端请求会被严格拦截。

修复方式:

  • 开发环境临时关闭CSRF(不推荐生产环境):在SecurityFilterChain配置中添加关闭逻辑
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .cors(Customizer.withDefaults()) // 启用自定义CORS配置
            .csrf(csrf -> csrf.disable()) // 关闭CSRF保护
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/v1/auth/**").permitAll() // 放行认证接口
                .anyRequest().authenticated()
            );
        return http.build();
    }
    
  • 生产环境推荐配置CSRF令牌传递:后端配置允许前端读取CSRF令牌Cookie,Axios会自动携带令牌请求头
    http.csrf(csrf -> csrf
        .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
    );
    

2. CORS配置未被Spring Security加载

已定义的CorsConfigurationSource Bean需要通过SecurityFilterChain启用,否则Spring Security会优先处理请求,CORS规则不生效。

修复方式:
在SecurityFilterChain中添加.cors(Customizer.withDefaults()),确保自定义CORS配置被应用(代码示例见上方SecurityFilterChain配置)。

3. 请求体格式不匹配

确认Axios发送的请求体字段与后端AuthenticationRequest类完全一致(注意字段大小写)。可通过浏览器开发者工具查看请求体内容,对比Postman的请求格式。

4. 权限配置未放行认证接口

确保/api/v1/auth/authenticate接口被配置为允许匿名访问,否则未认证的POST请求会被拦截返回403。在SecurityFilterChain中添加:

.requestMatchers("/api/v1/auth/authenticate").permitAll()

验证步骤

  1. 重启Spring Boot应用,确保配置生效
  2. 通过浏览器开发者工具查看请求详情,确认是否存在CORS或CSRF相关报错
  3. 检查响应体中的具体错误提示,辅助定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:11:29