news 2026/7/9 16:13:49

SpringMVC前后端分离跨域问题解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringMVC前后端分离跨域问题解决方案

问题

因为最近在学习vue和springboot.用到了前后端分离.前端webpack打包运行的时候会启动nodejs的服务器占用8080端口,后端springboot自带tomcat启动占用1111端口(我自己设置的)...导致前端请求的ajax到后台会产生跨域问题...然后自己试了试发现有2种办法都可以解决.

利用SpringMVC @CrossOrigin注解

1 package com.labofjet.system.controller; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 6 //@CrossOrigin(value = "*", allowCredentials = "true") 7 public class BaseController { 8 protected Logger log = LoggerFactory.getLogger(this.getClass()); 9 }

CrossOrigin这个注解可以允许ajax跨域请求....但是有个很明显的缺点就是ajax会请求2次,第一次请求类型是options.查看是不是允许发起跨域请求.然后才会发起get呀post呀这样的请求...这就很蛋疼了.相当于需要花费额外的时间再请求上.毕竟请求次数翻倍了.

另外如果要传输cookies的话似乎需要额外设置

allowCredentials = "true"

具体我也没试过.因为那个时候我用另外一种方法去解决了,不过看api文档上是说设置成true就可以解决了..

这种方式除了请求次数变多以外,我感觉还有1个主要问题就是你得设置你允许哪些站点跨域访问你..你为了开发方便设置成*...那么实际上了生产..别人哪个域名都可以给你发跨域请求..这就很尴尬了..而且注解是写在代码里的.你很难在生产和开发中分别设置不同的值.

使用nginx作为反向代理

所以就有了这种方法...我觉得这是一种比较好的解决办法..为什么呢?

因为使用nginx作为反向代理的时候前端用户浏览器访问的是nginx的地址,是一个地址,ajax请求的地址也是这个地址,只是在nginx里配置了去找后台的api.所以没有跨域的问题的.

具体做法:

首先设置nginx代理所有请求

server { listen 1112; server_name 127.0.0.1; location / { proxy_pass http://127.0.0.1:8080/; } }

比如监听1112端口,所有请求都转发到8080的前端nodejs端口.

然后再配置后台数据的接口,比如/api/开头的请求都转发给springboot后台1111端口.

location /api/ { proxy_pass http://127.0.0.1:1111/; #index index.html index.htm; }

那么这样做的话需要前端代码里所有的ajax请求都加上api开头前缀...所以需要统一配置下...

const ajaxUrl = env === 'development' ? '/api' : env === 'production' ? 'https://www.url.com' : 'https://debug.url.com'; util.ajax = axios.create({ baseURL: ajaxUrl, timeout: 30000 });

我前端ajax用的是axios...可以配置baseURL去控制请求的地址的前缀.所以还是蛮方便的.

这样就完成了.在用户浏览器看上去前后台数据都是从1112端口发来的,并不知道nginx做了反向代理.所有cookies也都写在1112端口下.所以没有跨域问题也没有cookies的问题.

小结

通过nginx或者其他反向代理工具把请求转发给前台和后台服务器可以比较方便的解决前后端分离跨域问

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 16:12:33

.NET数据可视化实战:如何用OxyPlot高效构建专业级图表

.NET数据可视化实战:如何用OxyPlot高效构建专业级图表 【免费下载链接】oxyplot A cross-platform plotting library for .NET 项目地址: https://gitcode.com/gh_mirrors/ox/oxyplot 在.NET开发中,数据可视化常常面临平台限制和功能单一的困境。…

作者头像 李华
网站建设 2026/7/9 16:09:44

人生建设落地的最小单位是什么?

梦想,是人生建设的一部分;事业,是人生建设的一部分;健康,是人生建设的一部分;家庭,也是人生建设的一部分。 所以,人生建设更像是在持续建造自己的人生系统。第一层:什么叫…

作者头像 李华
网站建设 2026/7/9 16:09:00

3PEAK思瑞浦 TPCMP272-SO1R SOP8 比较器

特性电源电压:2.5 V 至 5.5 V低电源电流:每通道650 μA传播延迟:10 ns内部迟滞确保清晰的开关切换失调电压:10 mV输入偏置电流:典型值30 pA输入共模范围扩展100 mV推挽输出

作者头像 李华
网站建设 2026/7/9 16:08:07

夸克网盘在线解析:高速直链下载的方法

当我们想要下载夸克网盘里面的一些文件时,当你不想开会员又想下载速度很快的时候,应该怎么办呢?不妨来看看我这方法---》:点我打开方法 下载速度看你的网速和宽带跑个10几M/秒不是问题,亲测有效,接下来就是…

作者头像 李华