springboot跨域如何设置SameSite的实现

网友投稿 1006 2023-01-22

springboot跨域如何设置SameSite的实现

springboot跨域如何设置SameSite的实现

前言

今天记录一个前段时间遇到的一个小问题的解决方法, 跨域!!!

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

问题

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

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

解决方法

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

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

response.setHehttp://ader("Set-Cookie", "SameSite=None;Secure;jsESSIONID=xxx");

注意, 上面的代码有个坑

这样设置时候, 我们期望的是一个请求后, cookie里面能够设置JSESSIONID. 然而, 并没有达到我们的预期效果

在老夫的头发快抓完的时候, 在反反复复的阅读了上面的那篇文章之后, 老夫抱着尝试的心态改了一下上面的代码, 如下:

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JDBC核心技术详解
下一篇:SpringBoot整合LDAP的流程分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~