解决前后端分离 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+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oct 24 Javascript
JQuery 返回布尔值Is()条件判断方法代码
May 14 Javascript
javascript中注册和移除事件的4种方式
Mar 20 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
Jan 03 Javascript
JSON与JS对象的区别与对比
Mar 01 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
vue弹出框组件封装实例代码
Oct 31 Javascript
js实现简易计算器小功能
Nov 18 Javascript
javascript代码实现简易计算器
Jan 25 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清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php实现购物车功能(上)
2020/07/23 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
javascript 节点遍历函数
2010/03/28 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
js实现微信聊天效果
2020/08/09 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现多进程共享数据的方法分析
2017/12/04 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
小学班主任事迹材料
2014/12/17 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书