栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

由于跨域OPTIONS请求带来的java web应用session失效的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

由于跨域OPTIONS请求带来的java web应用session失效的问题

 

访问链路如上图。

现象是:

      使用微信公众号、浏览器、app嵌webview来访问都是正常的,但是钉钉中打开web页面就会出现POST请求到达tomcat时会话是失效的,GET请求是正常的。

原因:

       由于系统采用前后端分离的结构,浏览器访问前端静态页面时使用的是  a.domain.com,前端页面使用ajax发起post请求时使用的是 b.domain.com,也就是说post请求是一个跨域的请求。当出现跨域的ajax POST请求时,浏览器会先发起一次OPTIONS请求预检资源是否可访问,在这次OPTIONS请求中,浏览器不会传递用于会话跟踪的cookie(SESSIONID),这时候由于在服务端的filter中调用了HttpSession的api,tomcat会自动创建一个新会话session,并同时返回用于session跟踪的cookie(SESSIONID),钉钉的浏览器实现会把此cookie覆盖正常的会话cookie,导致发起紧跟OPTIONS请求后的POST请求时传递的会话cookie(SESSIONID)是OPTIONS请求返回的cookie,从而在服务端拿到的不是期望的会话数据,也就是会话失效。

解决办法:

         在后端中对OPTIONS请求不做任何拦截处理,不要访问HttpSession的任何api,交给tomcat处理即可。

有意思的是这个问题排查了非常久,之前已经稳定运行了几年的系统(包括钉钉中访问),由于这次升级k8s和网关在钉钉中出现这个问题,当使用另一些访问链接的时候是正常的,包括钉钉里都是正常的。如下图所示:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号