解决前后端分离 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 相关文章推荐
在JavaScript中监听IME键盘输入事件
May 29 Javascript
JS打印gridview实现原理及代码
Feb 05 Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
JavaScript变量类型以及变量作用域详解
Aug 14 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
Vue.js路由实现选项卡简单实例
Jul 24 Javascript
vue实现标签云效果的方法详解
Aug 28 Javascript
JSON获取属性值方法代码实例
Jun 30 Javascript
五句话帮你轻松搞定js原型链
Dec 09 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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
多文件上传的例子
2006/10/09 PHP
php4的彩蛋
2006/10/09 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
python实现决策树分类算法
2017/12/21 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
Python map及filter函数使用方法解析
2020/08/06 Python
南威尔士家居商店:Leekes
2016/10/25 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
学习2014年全国两会心得体会
2014/03/12 职场文书
合作意向书格式及范文
2014/03/31 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
公务员处分决定书
2015/06/25 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
python开发飞机大战游戏
2021/07/15 Python