Spring Security 6.3 增加了被動的 JDK 序列化/反序列化,以實現無縫升級。

工程 | Marcus Hert Da Coregio | 2024 年 1 月 19 日 | ...

在 Spring Security 的早期版本中,我們故意決定不對不同版本的專案之間的序列化類(透過 JDK 序列化)提供任何相容性保證。這個決定主要考慮了 RMI 的上下文,並建議伺服器和客戶端應使用相同版本的 Spring Security。

隨著越來越多的應用依賴持久化會話和像 Spring Session 這樣的技術,不一致的序列化問題變得愈發突出。持久化會話意味著將使用者會話儲存為一種可以儲存並在稍後的各種請求、伺服器,甚至應用程式重啟後使用的格式。在這些情況下,如果 JDK 序列化不是被動式的,嘗試使用舊版本或新版本 Spring Security 中儲存的物件時可能會遇到問題。

所有可序列化的 Spring Security 類都定義了一個共享的 serialVersionUID。然而,這個通用識別符號會在每個次要版本釋出時更新。因此,例如在 6.0 版本中序列化的物件,在 6.1 版本中無法反序列化,反之亦然——即使物件的結構保持不變。這意味著看似簡單的次要版本升級可能會導致問題。

儘管 Spring Security 的政策通常是不在次要版本之間引入任何破壞性更改,但 Java 序列化的情況並非如此。

從 Spring Security 6.3 開始,這一擔憂將成為過去。類序列化現在將經過與前一個次要版本相容性的測試。這項增強功能確保使用者升級到新版本不會無意中破壞序列化的物件,從而提供更健壯、更無縫的體驗。

如果您遇到任何與序列化相容性相關的問題,請在 專案的 issue tracker 上報告。我們期待您的反饋,並感謝您的合作,共同使 Spring Security 更加可靠和使用者友好。

更多詳情,您可以參考以下連結

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有