当前位置: 首页 > news >正文

解决Spring Boot前后端分离开发模式中的跨域问题

在实际开发中,经常会遇到前端Vue应用与后端Spring Boot API接口存在跨域访问的问题。本篇博客将分享解决Spring Boot前端Vue跨域问题的实战经验,帮助开发者快速解决该问题。

一、跨域问题的原因

跨域问题是由于浏览器的同源策略引起的。同源策略限制了从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。当协议、主机名或端口号不同时,浏览器就会认为这是跨域访问,从而拒绝请求。

二、解决方案

1. 后端配置

在Spring Boot后端项目中,我们可以通过添加跨域配置允许前端Vue应用的跨域请求。

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("*").allowedHeaders("*").allowCredentials(true).maxAge(3600);}
}

以上代码中使用@Configuration注解标注一个配置类,并实现WebMvcConfigurer接口。在addCorsMappings方法中,配置了允许所有来源(allowedOrigins("*"))、所有HTTP方法(allowedMethods("*"))、所有请求头(allowedHeaders("*"))、支持跨域携带Cookie(allowCredentials(true))以及缓存时间(maxAge(3600))。

2. 前端配置

在Vue前端项目中,我们可以通过配置vue.config.js文件来解决跨域问题。

module.exports = {devServer: {proxy: {'/api': {target 'http://localhost:8080',  // 后端API接口地址changeOrigin: true,pathRewrite: {'^/api': ''}}}}
}

以上代码中,我们通过devServer配置项的proxy属性来配置代理。将请求路径中以api开头的请求代理到指定的后端API接口地址(这里是http://localhost:8080)。changeOrigin设置为true表示开启跨域。

三、实战示例

在实际开发中,我们可以通过以下示例来演示解决Spring Boot端Vue跨域问题的实战经验。

后端代码示例:

@RestController
@RequestMapping("/api")
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
```javascript
axios.get('/api/hello').then(response => {console.log(response.data);}).catch(error => {console.error(error);});

以上示例中,后端提供了一个简单的接口/api/hello,前端通过axios发送GET请求来获取数据。

四、总结

本篇博客介绍了解决Spring Boot前端Vue跨域问题的实战经验,并提供了后端和前端的配置示例。通过配置后端和前端,我们可以轻松解决跨域问题,实现正常的前后端交互。希望本文能对开发者有所帮助,欢迎大家扩散分享!

以上内容仅供参考,具体情况还需根实际项目进行调整。如有更好的解决方案,欢迎留言讨论。

参考资料

  • Spring Boot官方文档
  • Vue官方文档
  • Axios官方文档
  • MDN Web Docs - 同源策略
http://www.lryc.cn/news/139127.html

相关文章:

  • 常见前端面试之VUE面试题汇总五
  • 带着问题看SpringBoot
  • 【Go 基础篇】Go语言匿名函数详解:灵活的函数表达式与闭包
  • MobileNet、MobileNetV2和MobileNetV3创新点总结
  • 算法:数据转换处理2(云台显控)
  • 让大数据平台数据安全可见-行云管家
  • 微信小程序开发教学系列(3)- 页面设计与布局
  • 基于JSP+Servlet+mysql员工权限管理系统
  • Qt 自定义提示框 右下角冒泡
  • js、PHP连接外卖小票机打印机方案(调用佳博、芯烨等)
  • window定时备份MySQL数据库,默认备份7天,一小时备份一次
  • 正则中常见的流派及其特性
  • .net6.0引用的dll放置单独的文件夹
  • CMake:检测外部库---自定义find模块
  • vue直接使用高德api
  • Setting
  • 时序预测 | Matlab实现SO-CNN-BiGRU蛇群算法优化卷积双向门控循环单元时间序列预测
  • 论文浅尝 | KRACL-利用图上下文和对比学习的稀疏KG补全
  • 【C++】右值引用,移动语义,完美转发
  • 【AI】即使AI 时代,程序员也无需焦虑
  • Django实现DRF数据API接口格式封装
  • [Go版]算法通关村第十三关白银——数字数学问题之数组实现加法、幂运算
  • 【 OpenGauss源码学习 —— 列存储(Insert)】
  • Android 13.0 framework中实现默认长按电源键弹出关机对话框功能
  • 微信小程序,封装身高体重选择器组件
  • 深度学习调参技巧
  • 图论基础和表示(Java 实例代码)
  • 各种数据库查询报错问题
  • 人效九宫格城市沙龙暨《人效九宫格白皮书》发布会 —上海站,圆满结束
  • 【C语言】文件操作 -- 详解