Spring Security 6.3 新增被動式 JDK 序列化/反序列化,實現無縫升級

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

在 Spring Security 的早期版本中,曾刻意決定不保證不同版本專案之間序列化類別(透過 JDK 序列化)的相容性。此決定的主要考量因素是 RMI,建議伺服器和客戶端都應使用相同版本的 Spring Security。

隨著越來越多的應用程式依賴持久性 Session 和 Spring Session 等技術,序列化不一致的問題變得更加重要。 持久性 Session 意味著將使用者 Session 轉換為可以儲存,並在後續的請求、伺服器,甚至應用程式重新啟動時使用的格式來儲存使用者 Session。 在這些情況下,如果 JDK 序列化不是被動的,當嘗試使用在較舊或較新版本的 Spring Security 中儲存的物件時,可能會導致問題。

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

雖然 Spring Security 的政策通常是不在次要版本之間引入任何重大變更,但 Java 序列化的情況並非如此。

從 Spring Security 6.3 開始,此問題已成為過去。 現在將測試類別的序列化與前一個次要版本的相容性。 此增強功能向使用者保證,升級到較新版本不會無意中中斷序列化的物件,從而提供更強大和無縫的體驗。

如果您遇到任何與序列化相容性相關的問題,請在專案的 Issue 追蹤器上報告。 我們期待收到您的意見,並感謝您在使 Spring Security 更加可靠和使用者友善方面的合作。

如需更多詳細資訊,您可以參考以下連結

取得 Spring 電子報

隨時掌握 Spring 電子報的最新消息

訂閱

領先一步

VMware 提供培訓和認證,可加速您的進展。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看所有