解决前后端分离 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 相关文章推荐
计算世界完全对称日的js代码,粗糙版
Nov 04 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
Dec 28 Javascript
js如何获取file控件的完整路径具体实现代码
May 15 Javascript
jquery ajax jsonp跨域调用实例代码
Dec 11 Javascript
jQuery实现统计复选框选中数量
Nov 24 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
jQuery居中元素scrollleft计算方法示例
Jan 16 Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 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图像处理类代码分享
2012/01/19 PHP
php实现的通用图片处理类
2015/03/24 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
python创建学生管理系统
2019/11/22 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
护士求职信范文
2014/05/24 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
2015年林业工作总结
2015/05/14 职场文书
初中军训感想
2015/08/07 职场文书