记⼀次chrome浏览器升级到85版本引发的Session失效问题⼀、 背景
现场同事反映,⽣产环境报错,数据平台⽆法从Session中获取⽤户名。技术框架采⽤的是Shiro + SpringBoot。该问题在开发环境⽆法复现。
后来出差到现场之后,了解情况为第三⽅平台会调⽤我⽅的数据平台,并嵌套展⽰在对⽅的平台上。我⽅平台单独展⽰⽆问题,但是嵌套调⽤报Session获取⽤户名异常
⼆、分析
依赖shiro框架获取⽤户名的代码如下
ShiroUser shiroUser = (ShiroUser) Subject().getPrincipal();
if (shiroUser != null) {
LoginName()
}
从代码中可知,⽤户名从Session中获取。 猜测是Session异常。 怀疑是重复登录、登录失效,以及跨
域请求失效。
逐⼀排除之后,将问题定位为跨域请求问题。 ⽹上搜索chrome跨域请求相关资料,得知chrome在85版本更新了安全策略,跨域请求⽆法携带cookie。
三、故障修复
解决⽅法: 将chrome浏览器版本降低到85以下, 问题解决。
其他可能的解决⽅案:
1. 85以上chrome浏览器版本,可以在设置中禁⽤SameSite安全策略
2. 不要使⽤iframe进⾏页⾯嵌套,⽽是采⽤弹出新窗⼝的⽅法。
3. 在response header中设置cookie属性为。  SameSite=None;Secure=True, 同时启⽤httpsshiro安全框架
4. 不要⽤cookie共享⽤户,⽽是采⽤token的⽅式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。