SpringBoot+Vue的前后端分离项目完成跨域资源共享

server/2025/1/19 18:29:00/

在SpringBoot+Vue的前后端分离项目中,实现跨域资源共享(CORS)是开发过程中的一个重要环节。以下是一些常见且有效的方法来解决跨域问题:

一、CORS(跨源资源共享)简介

CORS定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它允许服务器指定哪些源可以访问该服务器上的资源。在前后端分离的项目中,由于前端和后端通常部署在不同的域名或端口上,因此会出现跨域问题。

二、后端解决方法

  1. 使用@CrossOrigin注解

    • 这种方法适用于单个控制器或控制器方法级别的跨域配置。
    • 示例代码:
    @RestController
    public class MyController {@CrossOrigin(origins = "http://localhost:3000") // 允许指定域名的跨域请求@GetMapping("/example")public String example() {return "Example Response";}
    }
    注意:虽然简单,但重复代码较多,维护麻烦,不推荐用于大量接口。
  2. 全局跨域配置

    • 通过实现WebMvcConfigurer接口并重写addCorsMappings方法,可以设置全局的CORS配置。
    • 示例代码:
    @Configuration
    public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许跨域的路径.allowedOrigins("http://localhost:3000") // 允许的域名.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法.allowedHeaders("*") // 允许的头信息.allowCredentials(true) // 是否允许证书(cookies).maxAge(3600); // 预检请求的缓存时间}
    }
    这种方法适用于整个应用的跨域配置,更加简洁和易于维护。
  3. 使用CorsFilter过滤器

    • 创建一个CorsFilter过滤器,可以在Spring Security中使用,或者直接在Spring Boot中使用。
    • 示例代码:
    @Component
    public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization");HttpServletRequest request = (HttpServletRequest) req;if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {response.setStatus(HttpServletResponse.SC_OK);} else {chain.doFilter(req, res);}}
    }
    这种方法提供了更细粒度的控制,但相对复杂一些。

三、前端解决方法

在Vue项目中,可以通过配置代理来解决跨域问题。这种方法适用于开发环境。

  1. vue.config.js中配置代理

    module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8080', // 后端接口地址changeOrigin: true, // 开启代理pathRewrite: { '^/api': '' } // 重写路径}}}
    }

  2. 在封装的axios请求中设置baseURL

     
    import axios from 'axios';
    const instance = axios.create({baseURL: '/api',timeout: 6000
    });
    export default instance;

四、服务器解决方法

如果项目已经部署到生产环境,可以通过服务器(如Nginx)来配置跨域。

  1. 在Nginx配置文件中添加跨域配置

    server {listen 80;server_name localhost;root /usr/web/dist/; # 指向Vue项目的build后的dist文件夹location / {root $root;index index.html;}location /api { # api映射add_header 'Access-Control-Allow-Origin' '*';proxy_pass http://backend_server_address; # 后端服务器地址}
    }

五、总结

跨域资源共享(CORS)在前后端分离的项目中是一个常见且重要的问题。通过后端配置(如使用@CrossOrigin注解、全局跨域配置、CorsFilter过滤器)、前端配置代理以及服务器配置(如Nginx)等方法,可以有效地解决跨域问题。在实际项目中,应根据具体需求和场景选择合适的方法。


http://www.ppmy.cn/server/159682.html

相关文章

vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权

文章目录 简介一、先看效果1.1 授权定位前,先弹出隐私协议弹框1.2 上述弹框点击同意,得到如下弹框1.3 点击三个点,然后点设置 1.4 在1.2步骤下,无论同意或者拒绝 二、manifest.json 文件配置三、微信公众平台配置3.1 登录进入微信…

npm的包管理

从哪里下载包 国外有一家 IT 公司,叫做 npm,Inc.这家公司旗下有一个非常著名的网站: https://www.npmjs.com/,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心!到目前位置,全球约…

今天你学C++了吗?——C++中的STL

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现

前言 最近使用最新版的Serilog记录日志时,发现以前有些关于Serilog的Nuget弃用了,最关键的是有些配置写法也改变,于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明:我是用的.Net6,最新长期支持…

pyqt5开发ui图形化工具

1.背景 本人系统, 网络, 内核驱动, 嵌入式开发, 之前项目没机会接触UI图形程序开发, 测试用例都是终端文字提示 OK/NG, scuuess/fail, 高级一点终端文字加高亮颜色也曾幻想自己开发一款 软件工具/APP, 让上百万人使用, 然后被 被阿里/腾讯/…收购, 最后躺平虽然做了程序员, 成…

HTML5 Canvas实现的跨年烟花源代码

以下是一份基于HTML5 Canvas实现的跨年烟花源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">…

合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用

长期以来&#xff0c;名片都是企业商务沟通的重要工具。随着企业数字化转型&#xff0c;相较于传统的纸质名片&#xff0c;数字名片对于企业成员拓展业务、获取商机、提升企业形象等方面发挥着重要作用。近期&#xff0c;合合信息旗下名片全能王正式上线原生鸿蒙应用市场&#…

MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解

大家好&#xff0c;我是袁庭新。 MySQL作为企业项目中的主流数据库&#xff0c;其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具&#xff0c;旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…