解决前后端分离 vue+springboot 跨域 session+cookie失效问题


Posted in Javascript onMay 13, 2019

环境:

前端 vue ip地址:192.168.1.205

后端 springboot2.0 ip地址:192.168.1.217

主要开发后端。

问题:

首先登陆成功时将用户存在session中,后续请求在将用户从session中取出检查。后续请求取出的用户都为null。

解决过程:

首先发现sessionID不一致,导致每一次都是新的会话,当然不可能存在用户了。然后发现cookie浏览器不能自动保存,服务器响应set-cookie了

解决前后端分离 vue+springboot 跨域 session+cookie失效问题

搜索问题,发现跨域,服务器响应的setCookie浏览器无法保存,而且就算保存了域名不同也不能携带。

第一步:

后台添加过滤器,因为前后端分离,不可能每个方法都写一遍,所以添加过滤器统一处理。

package com.test.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(urlPatterns = "/*", filterName = "CORSFilter")
public class CORSFilter implements Filter {
 @Override
 public void destroy() {
 }
 /**
  * 此过滤器只是处理跨域问题
  * @param servletRequest
  * @param servletResponse
  * @param chain
  * @throws ServletException
  * @throws IOException
  */
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {
  HttpServletRequest req = (HttpServletRequest) servletRequest;
  HttpServletResponse resp = (HttpServletResponse) servletResponse;
  String origin = req.getHeader("Origin");
  if(origin == null) {
   origin = req.getHeader("Referer");
  }
  resp.setHeader("Access-Control-Allow-Origin", origin);//这里不能写*,*代表接受所有域名访问,如写*则下面一行代码无效。谨记
  resp.setHeader("Access-Control-Allow-Credentials", "true");//true代表允许携带cookie
  chain.doFilter(servletRequest,servletResponse);
 }
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 }
}

springboot2.配置过滤器时,启动类必须加上@ServletComponentScan才会加载过滤器

@SpringBootApplication
@EnableTransactionManagement(order = 10)
@ServletComponentScan
public class Application {
 public static void main(String[] args) {
  SpringApplication.run(Application.class, args);
 }
}

然后前端配置

使用vue.resource发送请求时配置如下:
main.js中
Vue.http.options.xhr = { withCredentials: true }
使用vue.axios发送请求时配置如下:
axios.defaults.withCredentials = true;
jquery请求带上 xhrFields: {withCredentials: true}, crossDomain: true;
$.ajax({
 type: "post",
 url: "",
 xhrFields: {withCredentials: true},
 crossDomain: true,
 data: {username:$("#username").val()},
 dataType: "json",
 success: function(data){ }
});

此时问题已解决。

但我查看请求时,还是没有带cookie,太纠结于这一点了。以至于查看全部cookie时突然明白了。

解决前后端分离 vue+springboot 跨域 session+cookie失效问题

没有带cookie。

浏览器全部cookie

解决前后端分离 vue+springboot 跨域 session+cookie失效问题

已经有服务器的cookie了。当向服务器发送请求时,会携带cookie,证明是同一会话。

发现火狐的请求头中存在cookie,不知道为什么谷歌的请求头不显示,不明白。望解答。

解决前后端分离 vue+springboot 跨域 session+cookie失效问题

总结

以上所述是小编给大家介绍的解决前后端分离 vue+springboot 跨域 session+cookie失效问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JQuery select标签操作代码段
May 16 Javascript
Node.js中的模块机制学习笔记
Nov 04 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
Nov 25 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 Javascript
JavaScript中Require调用js的实例分享
Oct 27 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
vue进行图片的预加载watch用法实例讲解
Feb 07 Javascript
element-ui中select组件绑定值改变,触发change事件方法
Aug 24 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
Sep 26 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 #Javascript
详解async/await 异步应用的常用场景
May 13 #Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 #Javascript
JavaScript Math对象和调试程序的方法分析
May 13 #Javascript
jsonp跨域获取百度联想词的方法分析
May 13 #Javascript
基于Fixed定位的框选功能的实现代码
May 13 #Javascript
JQuery事件委托原理与用法实例分析
May 13 #jQuery
You might like
开发大型 PHP 项目的方法
2007/01/02 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
python实现词法分析器
2019/01/31 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
分布式数据库需要考虑哪些问题
2013/12/08 面试题
出纳员的岗位职责
2014/02/22 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
个人租房协议书样本
2014/10/01 职场文书
大学生党员自我评价
2015/03/04 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js