Spring Session

Rob Winch; Vedran Pavić; Jay Bryant; Eleftheria Stein-Kousathana

Spring Session 提供用於管理使用者工作階段資訊的 API 和實作。

Spring Session 提供用於管理使用者工作階段資訊的 API 和實作,同時讓支援叢集式工作階段變得簡單,而無需受限於應用程式容器特定的解決方案。它還提供與以下項目的透明整合:

  • HttpSession:允許以應用程式容器中立的方式取代 HttpSession,並支援在標頭中提供工作階段 ID 以與 RESTful API 搭配使用。

  • WebSocket:提供在接收 WebSocket 訊息時保持 HttpSession 存活的能力

  • WebSession:允許以應用程式容器中立的方式取代 Spring WebFlux 的 WebSession

了解 Spring Session 解決的問題

當使用者與 Web 應用程式互動時,伺服器會建立工作階段以追蹤其活動。此工作階段可能會儲存使用者偏好設定、登入狀態和購物車內容等資訊。但是,工作階段在分散式環境中可能會出現問題,因為它們通常儲存在伺服器的記憶體中。

為了更好地了解 Spring Session 解決的問題,讓我們先視覺化以下圖表

In-Memory Sessions
圖 1. 記憶體內工作階段

在上面的圖表中,每個 Spring 應用程式都將其工作階段儲存在只有自己可以存取的位置,通常是在伺服器的記憶體中,但在分散式環境中這可能會成為問題。想像一下,Spring App #2 接收到具有工作階段 #3 的請求,應用程式將無法讀取工作階段資料,因為它儲存在 Spring App #1 的記憶體中。為了解決這個問題,我們需要實作某種類型的共用工作階段儲存,如下圖所示

Shared Session Storage
圖 2. 共用工作階段儲存

透過上述設定,工作階段將可供每個可以存取工作階段儲存的應用程式使用。

Spring Session 在應用程式和工作階段管理之間提供了一層抽象層。它允許將工作階段資料儲存在各種持久性儲存中,例如關聯式資料庫、NoSQL 資料庫和其他資料庫。

透過 Spring Session,無論使用哪種持久性儲存,您都可以使用相同的 API 來管理工作階段。這使得在儲存之間切換變得更容易,而無需變更應用程式程式碼。Spring Session 還提供工作階段過期和不同 Web 應用程式之間的跨內容通訊等功能。

總體而言,Spring Session 簡化了 Web 應用程式中使用者工作階段的管理,讓您可以更輕鬆地專注於建構應用程式的核心功能。

以下是 Spring Session 的一些常見用例

  • 分散式 Web 應用程式:如果您有一個分散在多個伺服器上的 Web 應用程式,則管理使用者工作階段可能具有挑戰性。Spring Session 可以透過將工作階段資料儲存在共用資料庫或 Redis 中來提供協助,從而允許所有伺服器存取和更新工作階段資料。

  • 工作階段可擴展性:在具有許多並行使用者的 Web 應用程式中,將工作階段儲存在伺服器上的記憶體中可能會導致可擴展性問題。Spring Session 允許您將工作階段資料儲存在持久性儲存中,從而提高可擴展性並降低記憶體不足錯誤的風險。

  • 工作階段備份和復原:將工作階段資料儲存在持久性儲存中還可以提供一種機制,用於在伺服器故障或停機時備份和復原工作階段資料。

Spring Session 社群

我們很高興將您視為我們社群的一份子。以下各節提供有關如何與 Spring Session 社群互動的更多資訊。

支援

您可以透過在 Stack Overflow 上使用 spring-session 標籤 提問來獲得協助。同樣地,我們鼓勵透過回答 Stack Overflow 上的問題來幫助他人。

原始碼

您可以在 GitHub 上找到原始碼:github.com/spring-projects/spring-session/

問題追蹤

我們在 GitHub 問題追蹤問題:github.com/spring-projects/spring-session/issues

貢獻

我們感謝提取請求

授權

Spring Session 是在 Apache 2.0 授權 下發布的開放原始碼軟體。

社群擴充功能

名稱 位置

Spring Session Infinispan

infinispan.org/docs/stable/titles/spring/spring.html

Spring Session Caffeine

github.com/gotson/spring-session-caffeine

最低需求

Spring Session 的最低需求為

  • Java 17+。

  • 如果您在 Servlet 容器中執行 (非必要),則為 Servlet 3.1+。

  • 如果您使用其他 Spring 程式庫 (非必要),則最低要求版本為 Spring 6.0.x。

  • @EnableRedisHttpSession 需要 Redis 2.8+。這是支援工作階段過期所必需的

  • @EnableHazelcastHttpSession 需要 Hazelcast 3.6+。這是支援FindByIndexNameSessionRepository所必需的

在其核心,Spring Session 僅對 spring-jcl 具有必要的依賴性。如需在沒有任何其他 Spring 依賴性的情況下使用 Spring Session 的範例,請參閱hazelcast 範例應用程式。