解决前后端分离 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 setCapture 区域外事件捕捉
Mar 18 Javascript
Node.js开发指南中的简单实例(mysql版)
Sep 17 Javascript
jquery实现点击文字可编辑并修改保存至数据库
Apr 15 Javascript
分享我的jquery实现下拉菜单心的
Nov 29 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 Javascript
微信小程序实现吸顶效果
Jan 08 Javascript
vue路由实现登录拦截
Mar 24 Vue.js
javascript实现计算器功能详解流程
Nov 01 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
深入解析php之apc
2013/05/15 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
详解Python的三种拷贝方式
2020/02/11 Python
Linux内核产生并发的原因
2012/07/13 面试题
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
建筑安全责任书范本
2014/07/24 职场文书
企业领导对照检查材料
2014/08/20 职场文书
信用卡工资证明范本
2014/10/17 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
大学生村官入党自传
2015/06/26 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
初中思品教学反思
2016/02/20 职场文书
学校教代会开幕词
2016/03/04 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python