解决前后端分离 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 性能优化指南(2)
May 21 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
Jan 23 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
ES6 Object属性新的写法实例小结
Jun 25 Javascript
vue-resource:jsonp请求百度搜索的接口示例
Nov 09 Javascript
vue中使用echarts的示例
Jan 03 Vue.js
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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
基于php split()函数的用法详解
2013/06/05 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
JSON的parse()方法介绍
2019/01/31 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
Python3基础之函数用法
2014/08/13 Python
python和opencv实现抠图
2018/07/18 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
逻辑链路控制协议
2016/10/01 面试题
求职信格式范本
2013/11/15 职场文书
罚款通知怎么写
2015/04/22 职场文书
法院答辩状格式
2015/05/22 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
简单谈谈Python面向对象的相关知识
2021/06/28 Python