SmartAdmin(基于 Spring Boot 框架)中配置跨域请求 VUE3 设置请求头

在 SmartAdmin(基于 Spring Boot 框架)中配置跨域请求,通常在后端通过以下几种常见方式进行设置。你可以根据项目的实际需求选择最合适的一种:

1. 全局配置(推荐)

通过实现 WebMvcConfigurer 接口来配置全局跨域规则。这种方式可以统一设置允许的请求路径、请求方法、凭证携带和缓存时间等,非常适合前后端分离的后台管理系统。

2. 使用 @CrossOrigin 注解

如果只需要针对特定的 Controller 或某个具体的接口开放跨域,可以直接在启动类、Controller 类或具体的方法上添加 @CrossOrigin 注解。这种方式配置简单,但作用范围较小。

3. 创建 CORS 过滤器

通过自定义或配置 Spring 提供的 CORS 过滤器(如 CorsFilter),在请求拦截阶段直接设置跨域响应头。这种方式在请求处理的最早期生效,能够拦截更多的请求类型。

4. 在配置文件中声明

在 Spring Boot 的配置文件(如 application.yml)中直接声明跨域参数,这种方式配置直观,便于在不同环境(如开发、生产)中灵活切换。

⚠️ 生产环境配置注意事项

在将 SmartAdmin 部署到生产环境时,跨域配置需要特别注意以下两点:

  • 指定具体域名 :生产环境中,应指定具体的允许域名,切勿使用通配符(*,以防止恶意网站伪造请求。
  • 凭证携带 :如果跨域请求需要携带凭证(如 Cookie、Token),在启用凭证时必须明确指定具体的域名,而不能使用通配符。

同时,前端(Vue3 + Vite)也需要根据后端的跨域配置,正确调整请求头设置,以确保跨域请求能够正常执行。

在 Vue3 中设置跨域请求头,通常结合 Axios 请求库来实现。你可以通过全局默认配置Axios 拦截器单次请求配置 三种方式来添加自定义请求头(如 AuthorizationContent-Type 等)。

以下是具体的设置方法:

1. 全局默认配置(适用于所有请求)

如果你希望在项目的每个请求中都自动携带相同的请求头,可以直接修改 Axios 的默认配置。这种方式无需为每个请求单独设置,适合添加通用的身份验证信息或内容类型:

复制代码
import axios from 'axios';

// 设置全局默认的 Authorization 头
axios.defaults.headers.common['Authorization'] = 'Bearer token123';

// 设置 POST 请求默认的 Content-Type
axios.defaults.headers.post['Content-Type'] = 'application/json';

2. 使用 Axios 拦截器(推荐)

在 Vue3 项目的实际开发中,最推荐的做法是使用请求拦截器。拦截器会在请求发送前统一处理,非常适合用来动态获取并注入 Token,或者统一处理请求头格式:

复制代码
import axios from 'axios';

// 创建 Axios 实例
const service = axios.create();

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 从本地存储中动态获取 Token
    const token = localStorage.getItem('token');
    if (token) {
      // 按照后端约定的格式添加 Authorization 请求头
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

3. 单次请求配置(适用于特定请求)

如果某些特殊的请求头只针对某一个特定的接口,可以在发起请求时,通过请求配置对象的 headers 属性进行单独指定:

复制代码
import axios from 'axios';

axios.get('https://example.com/api/data', {
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer token123'
  }
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});

⚠️ 跨域请求头的关键注意事项

在跨域场景下,前端成功添加了自定义请求头后,服务器端也必须进行相应的配置,否则请求会被浏览器的 CORS 策略拦截:

  1. 预检请求(Preflight) :当发送带有自定义请求头(如 Authorization)的跨域请求时,浏览器会先发送一个 OPTIONS 预检请求,询问服务器是否允许这些头信息。
  2. 后端响应头配置 :服务器必须在响应头中明确允许前端发送的自定义头字段。例如,需要在后端配置 Access-Control-Allow-Headers,将其值设置为允许 Content-TypeAuthorization 等字段,这样跨域请求才能顺利执行。
相关推荐
程序员黑豆6 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC6 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea6 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
风流 少年6 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
浮生望7 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少7 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
小席是个热心肠7 小时前
AI相关的自我学习
java·人工智能·学习
波波0077 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis8 小时前
es6知识点1-自备使用
前端·ecmascript·es6