springboot跨域设置SameSite springboot跨域怎样设置SameSite的实现

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

springboot跨域设置SameSite springboot跨域怎样设置SameSite的实现

秋风浪子   2021-05-08 我要评论
想了解springboot跨域怎样设置SameSite的实现的相关内容吗,秋风浪子在本文为您仔细讲解springboot跨域设置SameSite的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:springboot跨域设置SameSite,下面大家一起来学习吧。

前言

今天记录一个前段时间遇到的一个小问题的解决方法, 跨域!!!
相信跨域这个问题, 做开发的或多或少都遇到过, 而且已经有很多博主已经分享了相关的内容, 这次我用他们的方式都没有解决到, 所以记录一下.

问题

我们公司有个系统的域名跟主系统的域名不一致, 但是我们又需要把所有的系统都集成在一个框架下面, 使用的是iframe技术来实现. 使用单点登录来做所有系统的登录. 这样的设计就导致我们访问域名不同的系统的时候, 会有跨域的问题. 通常的解决方式这样, 在springboot里面设置跨域拦截器, 可以实现跨域访问.

但是, 但是, 我们使用了这个配置之后, 依然无法实现登录, 最明显的一个问题就是每次请求的sessionid都不一样, 即使是同一个页面的多个请求, sessionid也不一样.这样我们就无法通过session来保留会话.

解决方法

经过老夫不懈的Google, 最开始定位到问题的原因是因为Google浏览器的SameSite属性导致的. Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。这个属性有3个值, 具体的介绍可以看这篇文章 里面讲的很详细.

我们选择的是直接关闭这个属性,设置为None, 就像这样:

response.setHeader("Set-Cookie", "SameSite=None;Secure;JSESSIONID=xxx");

注意, 上面的代码有个坑

这样设置时候, 我们期望的是一个请求后, cookie里面能够设置JSESSIONID. 然而, 并没有达到我们的预期效果
在老夫的头发快抓完的时候, 在反反复复的阅读了上面的那篇文章之后, 老夫抱着尝试的心态改了一下上面的代码, 如下:
response.setHeader("Set-Cookie", "JSESSIONID=xxx;SameSite=None;Secure");

仔细看, 仅仅是JSESSIONID的位置改变了一下. 然后就成功了, 苍天啊~ 大地啊~仅仅是一个位置啊~~~~~~~

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们