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 解決的問題,讓我們先視覺化以下圖表

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

透過上述設定,工作階段將可供每個可以存取工作階段儲存的應用程式使用。
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 的最低需求為
-
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 範例應用程式。 |