You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React项目中Spring Boot无法接收Axios传递的请求头问题

React + Axios 调用 Spring Boot 后端(带 Bearer Token)

我来帮你把代码规范整理好,再补充几个实际开发中要注意的细节:

一、React 客户端 Axios 请求代码

你原来的写法逻辑没问题,建议把 Token 抽出来(不要硬编码),这样更符合实际登录后的场景:

// 从本地存储读取登录后得到的 Token(比如登录成功后存在 localStorage 里)
const authToken = localStorage.getItem('userToken');

// 配置请求选项
const requestOptions = {
  withCredentials: true,
  headers: {
    'Authorization': `Bearer ${authToken}`
  }
};

// 发送 POST 请求
axios.post('http://localhost:9090/services/list', null, requestOptions)
  .then(response => {
    console.log('请求成功返回数据:', response.data);
  })
  .catch(error => {
    // 更友好的错误打印,区分不同错误场景
    if (error.response) {
      console.error('后端返回错误:', error.response.status, error.response.data);
    } else if (error.request) {
      console.error('无响应返回:', error.request);
    } else {
      console.error('请求配置错误:', error.message);
    }
  });

二、Spring Boot 后端控制器代码

对应的控制器可以这样写,用来接收并处理 Authorization 请求头:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/services")
public class ServiceController {

    @PostMapping("/list")
    public ResponseEntity<List<String>> getServiceList(
            // 直接获取 Authorization 请求头
            @RequestHeader("Authorization") String authorizationHeader) {
        
        // 解析 Bearer Token:去掉前缀 "Bearer " 拿到实际的 Token 字符串
        String token = authorizationHeader.replace("Bearer ", "").trim();
        
        // 这里可以添加 Token 验证逻辑(比如用 JWT 工具类解析验证)
        // 示例:假设验证通过后,返回业务数据
        List<String> serviceList = List.of("服务A", "服务B", "服务C");
        
        return ResponseEntity.ok(serviceList);
    }
}

三、关键注意事项

  • 跨域(CORS)配置:因为你开启了 withCredentials: true,Spring Boot 必须配置允许携带凭证,并且不能用通配符 * 作为允许的 Origin,要指定你的 React 应用地址:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:3000") // React 应用的运行端口
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}
  • Token 过期处理:建议在 Axios 里添加请求拦截器,统一处理 Token 过期的情况,比如收到后端返回的 401 状态码时,自动跳转到登录页面重新获取 Token。
  • 安全提示:前端存储 Token 时,要注意防范 XSS 攻击,尽量避免在页面中直接暴露 Token 内容。

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

火山引擎 最新活动