解决前后端分离 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 相关文章推荐
告诉大家什么是JSON
Jun 10 Javascript
使用jquery实现图文切换效果另加特效
Jan 20 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
javascript中typeof的使用示例
Dec 19 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
hammer.js实现图片手势放大效果
Aug 29 Javascript
移动端效果之Swiper详解
Oct 09 Javascript
vue+iview 实现可编辑表格的示例代码
Oct 31 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 23 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编程中八种常见的文件操作方式
2006/11/19 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
用Python抢过年的火车票附源码
2015/12/07 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
python 循环遍历字典元素的简单方法
2016/09/11 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
体育教师自荐信范文
2013/12/16 职场文书
初三学生个人自我评定
2014/04/06 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis