解决前后端分离 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 相关文章推荐
Extjs学习笔记之六 面版
Jan 08 Javascript
Javascript实现CheckBox的全选与取消全选的代码
Jul 20 Javascript
jQuery 关于伪类选择符的使用说明
Apr 24 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
Aug 27 Javascript
Javascript 引擎工作机制详解
Nov 30 Javascript
vue 开发一个按钮组件的示例代码
Mar 27 Javascript
Vue render深入开发讲解
Apr 13 Javascript
vue自定义一个v-model的实现代码
Jun 21 Javascript
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
Nov 06 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
php格式文件打开的四种方法
2018/02/24 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Python Subprocess模块原理及实例
2019/08/26 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
Pytorch之contiguous的用法
2019/12/31 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
python文件读取失败怎么处理
2020/06/23 Python
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
一套C++笔试题面试题
2012/06/06 面试题
会计岗位职责范本
2014/03/07 职场文书
个人考核材料
2014/05/15 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
2014年村官工作总结
2014/11/24 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
vue+element ui实现锚点定位
2021/06/29 Vue.js
Node与Python 双向通信的实现代码
2021/07/16 Javascript
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫