springboot+vue项目怎么解决跨域问题详解

本文主要是介绍springboot+vue项目怎么解决跨域问题详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,...

1. 前端代理(开发环境推荐)

适用场景vue 开发环境调试时,避免直接请求后端接口的跨python域问题。

实现步骤

  • 在 Vue 项目的 vue.config.js 中配置代理:

    module.exports = {
      devServer: {
        proxy: {
          '/api': {  // 代理所有以 /api 开头的请求
            target: 'http://localhost:8080', // Spring Boot 后端地址
            changeOrigin: true, // 允许跨域
            pathRewrite: {
              '^/api': '' // 去除请求路径中的 /api 前缀
            }
          }
        }
      }
    }

    2.前端请求时使用 /api 前缀:

    axIOS.get('/api/users').then(response => {
      // 处理响应
    });

    优点:无需修改后端代码,适合开发阶段快速解决跨域。

2. 后端全局配置 CORS(生产环境推荐)

适用场景:生产环境需要后端直接支持跨域。
实现步骤

  • 在 Spring Boot 中创建全局 CORS 配置类:

    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/*www.chinasem.cn*") // 所有接口
                    .allowedOrigins("http://localhost:5173") // 允许的前端地址
                    .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法
                    .allowedHeaders("*") // 允许的请求头
                    .allowCredentials(true) // 允许发送 Cookie
                    .maxAge(3600); // 预检请求缓存时间(秒)
        }
    }

    2.若使用 Spring Security,需额外放行 OPTIONS 请求(预检请求):

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig {
    
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http.cors() // 启用 CORS
                .and()
                // 其他安全配置...
                .authorizeRequests()
                .requestMatchers(HttpMethod.OPTIONS).permitAll() // 放行 OPTIONS 请求
                .anyRequest().authenticated();
            return http.build();
        }
    }

3. 后端注解配置(按接口控制)

适用场景:仅特定接口需要跨域支持。

实现步骤:在 Controller 或方法上添加 @CrossOrigin 注解:

@RestController
@CrossOrigin(origins = "http://localhost:5173") // 类级别注解
public class UserController {

    @GetMapping("/users")
    @CrossOrigin(origins = "http://localhost:5173") // 方法级别注解
    public List<User> getUsers() {
        // 业务逻辑
    }
}

4.编程 Nginx 反向代理(生产环境终极方案)

适用场景:前后端部署到同一域名下,彻底避免跨域。

实现步骤

  • 配置 Nginx,将前端请求代理到后端接口:

    server {
        listen 80;
        server_name your-domain.com;
    
        # 前端静态资源
        location / {
            root /path/to/vue/dist;
            index index.html;
            try_files $uri $uri/ /index.html;
        }
    
        # 后端 API 代理
        location /api {
            proxy_pass http://localhost:8080;
            proxy_set_header Hostjavascript $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_China编程header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    2.重启 Nginx:

    sudo nginx -s reload

总结

方案适用场景优点缺点
前端代理开发环境无需后端改动,快速解决跨域仅适用于开发环境
后端全局 CORS生产环境统一管理,安全性可控需后端配置
注解配置特定接口跨域灵活控制单个接口配置冗余,维护成本高
Nginx 反向代理生产环境部署彻底解决跨域,提升性能需运维支持

推荐组合

  • 开发环境:前端代理(方案1) + 后端全局 CORS(方案2)。

  • 生产环境:Nginx 反向代理(方案4) + 后端全局 CORS(方案2,双重保障)。

到此这篇关于springboot+vue项目怎么解决跨域问题的文章就介绍到这了,更多相关springboot+vue解决跨域问题内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于springboot+vue项目怎么解决跨域问题详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154672

相关文章

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

浅析Java如何保护敏感数据

《浅析Java如何保护敏感数据》在当今数字化时代,数据安全成为了软件开发中至关重要的课题,本文将深入探讨Java安全领域,聚焦于敏感数据保护的策略与实践,感兴趣的小伙伴可以了解下... 目录一、Java 安全的重要性二、敏感数据加密技术(一)对称加密(二)非对称加密三、敏感数据的访问控制(一)基于角色的访问

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮