springboot前后端分离跨域,vue跨域解决方案 简书

  springboot前后端分离跨域,vue跨域解决方案 简书

  最近用springboot vue集成开发了一个前端分离的个人博客网站,所以本文总结了开发中遇到的一个问题,关于使用vue和springboot开发前端分离的项目时如何解决跨域问题。这里分享两种方法,分别在前端vue和后台springboot中解决。

  

目录

  浏览器同源策略一、在VUE前端配置代理解决跨域(1)允许浏览器请求携带cookie(2)vue (2)在vue中配置代理解决跨域是第一步,设置统一访问路径是第二步,配置跨域代理是第三步,测试请求是第二步。springboot后端配置解决跨域你好,我是灰猿,一个擅长写bug的程徐苑!

  

浏览器同源策略

  为什么会出现跨域问题?第一个定义一定要理解,就是浏览器的同源策略。

  浏览器的同源策略是什么?简单来说,发送请求的浏览器的协议、域名、端口要和接收请求的服务器的协议、域名、端口一致。这样就可以完成交互,但显然是不可能的,尤其是在同一台电脑上开发一个前后端分开的项目,会用到两个端口。那么就形成了一个跨域的问题。

  这里分享我用来解决跨领域问题的两种方法,

  

一、VUE前端配置代理解决跨域

  

(1)Vue中让浏览器请求携带cookie

  先说说我是怎么发现跨域问题的。起初,我从前端浏览器向后台发送请求时没有携带浏览器的cookie,但这导致无法验证浏览器的请求。所以后来我用了一个方法,让浏览器在每次发送请求的时候,在http请求头中携带cookie。该方法如下:

  在vue的main.js方法中编写以下代码:

  //引入axios依赖

  从“axios”导入axios

  //让请求携带浏览器的cookie。

  axios . defaults . with credentials=true

  Vue.prototype.$axios=axios

  上面的意思是引入了axios请求,也就是ajax请求,同时打开了写凭证。只有当withCredentials等于true时,cookie才会被携带。

  

(2)vue中配置代理解决跨域

  在vue中解决跨域问题其实是比较简单的,因为每次从我们的浏览器发送请求时,URL的前半部分必须是相同的,比如http://localhost:8080/blogs和http://localhost:8080/login。我们可以把它们相同的URL提取出来,封装到axios.defaults.baseURL中,这样,我们每次发出请求,就可以简单地把请求地址写成“/blogs”,相当于简单地封装了URL头。

  注意:设置统一请求路径的axios . defaults . baseurl=

  “http://localhost:8080”应该写在axios.js中

  但是在解决跨域问题时,我们应该把axios . defaults . base URL= 3358 localhost:8080 写成axios.defaults.baseURL="/api "。

  这样我们每次请求的路径前面都会有“/api”的形式。

  这也是第一步:

  

第一步,设置统一访问路径

  在axios.js中设置axios . defaults . baseurl= 3358 localhost:8080 ,并编写axios.defaults.baseURL=/api

  

第二步、配置跨域代理

  在babel.config.js的同级目录中创建一个新的js文件vue.config.js

  在里面写下面这段代码:这段代码是一个配置用来解决跨域问题的代理。我这里后台服务器请求的连接是http://localhost:8081,所以如果你的不是就需要修改。

  /**

  *解决跨领域问题

  * @ type { { devserver:{ /API :{ change origin:boolean,pathRewrite: {^/api:字符串},target: string}},host: string,open: boolean}}}

  */

  模块.导出={

  devServer: {

  主机:“本地主机”,

  Open: true,//自动打开浏览器。

  //代理配置表,可以将特定的请求代理配置到对应的API接口。

  //例如,代理“localhost:8080/api/xxx”到“www.example.com/api/xxx

  代理服务器:{

  /api: {//匹配所有以/api 开头的请求路径

  Target: 3358localhost: 8081 ,//代理目标的基路径

  //secure: false,//如果是https接口,需要配置这个参数。

  ChangeOrigin: true,//跨域支持

  PathRewrite: {//重写路径:删除路径开头的“/api”。

  ^/api:

  }

  }

  }

  }

  }

  

第三步、测试请求

  如果我们想现在发送一个登录请求,该请求应该如下所示:

  这个。$axios.post(/login )

  

二、springboot后端配置解决跨域

  要解决springboot框架后端的跨域问题,只需要添加一个类CorsConfig,并使其实现WebMvcConfigurer接口,代码如下。一般来说,你可以在开发过程中直接复制代码。

  导入org . spring framework . context . annotation . configuration;

  import org . spring framework . web . servlet . config . annotation . CORS registry;

  导入org . spring framework . web . servlet . config . annotation . webmvc configurer;

  /**

  *解决跨领域问题

  */

  @配置

  公共类CorsConfig实现WebMvcConfigurer {

  @覆盖

  public void addCorsMappings(CORS registry注册表){

  registry.addMapping(/** )。allowedOriginPatterns(* )。allowed methods(“GET”、“HEAD”、“POST”、“PUT”、“DELETE”、“OPTIONS”)。allowCredentials(true)。maxAge(3600)。allowed headers(“*”);

  }

  }

  以上两种解决跨域问题的方法,网上都有,但是比较复杂。经过自己的尝试和研究,以上两种方法都是自己测试成功的。当时配置了前后端。

  所以朋友们有不同意见或者更好的方法,欢迎指正!

  我是灰猿,下次再见!

  关于SpringBoot和Vue交互的跨域问题的解决方法,本文到此为止。有关SpringBoot和Vue之间交互的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: