springboot跨域如何設置SameSite


前言

好久沒有更新博客了, 我還是太懶了, 今天繼續更新!

今天記錄一個前段時間遇到的一個小問題的解決方法, 跨域!!!

相信跨域這個問題, 做開發的或多或少都遇到過, 而且已經有很多博主已經分享了相關的內容, 這次我用他們的方式都沒有解決到, 所以記錄一下.

問題

我們公司有個系統的域名跟主系統的域名不一致, 但是我們又需要把所有的系統都集成在一個框架下面, 使用的是iframe技術來實現. 使用單點登錄來做所有系統的登錄. 這樣的設計就導致我們訪問域名不同的系統的時候, 會有跨域的問題. 通常的解決方式這樣, 在springboot里面設置跨域攔截器, 可以實現跨域訪問.

image.png

但是, 但是, 我們使用了這個配置之后, 依然無法實現登錄, 最明顯的一個問題就是每次請求的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的位置改變了一下. 然后就成功了, 蒼天啊~ 大地啊僅僅是一個位置啊~~~~~~

遂, 該篇水文完~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM