解决前后端分离 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的多个选择器的使用示例
Oct 18 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
JS验证不重复验证码
Feb 10 Javascript
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
javascript对HTML字符转义与反转义
Dec 13 Javascript
jquery实现购物车基本功能
Oct 25 jQuery
jquery传参及获取方式(两种方式)
Feb 13 jQuery
JavaScript数组排序的六种常见算法总结
Aug 18 Javascript
小程序自定义圆形进度条
Nov 17 Javascript
vue实现简易计算器功能
Jan 20 Vue.js
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
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
Angular ElementRef简介及其使用
2018/10/01 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
python 字符串split的用法分享
2013/03/23 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
python绘制雪景图
2019/12/16 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
澳大利亚网上书店:QBD
2021/01/09 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
银行先进个人总结
2015/02/15 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸