解决前后端分离 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 页面内容搜索,类似于 Ctrl+F功能的实现代码
Aug 13 Javascript
对JavaScript的eval()中使用函数的进一步讨论
Jul 26 Javascript
javascript中的变量是传值还是传址的?
Apr 19 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
基于javascript中的typeof和类型判断(详解)
Oct 27 Javascript
全面分析JavaScript 继承
May 30 Javascript
JavaScript Array对象基本方法详解
Sep 03 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 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
2020最新CPU的性能排名
2020/04/02 数码科技
用文本作数据处理
2006/10/09 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Django中几种重定向方法
2015/04/28 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python爬虫基本知识
2018/03/05 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
kfc实习自我鉴定
2013/12/14 职场文书
小学生秋游活动方案
2014/02/23 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL