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的位置改變瞭一下. 然後就成功瞭, 蒼天啊~ 大地啊~僅僅是一個位置啊~~~~~~~

到此這篇關於springboot跨域如何設置SameSite的實現的文章就介紹到這瞭,更多相關springboot跨域設置SameSite內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: