最新の安定バージョンについては、Spring Session 3.4.1 を使用してください!

Spring Session

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

Spring Session は、ユーザーのセッション情報を管理するための API と実装を提供します。

Spring Session は、ユーザーのセッション情報を管理するための API と実装を提供すると同時に、アプリケーションコンテナー固有のソリューションに縛られることなくクラスター化されたセッションをサポートすることを簡単にします。また、以下との透過的な統合も提供します。

  • HttpSession : アプリケーションコンテナーに依存しない方法で HttpSession を置き換えることができ、RESTful API と連携するためにヘッダーでセッション ID を提供するためのサポートがあります。

  • WebSocket : WebSocket メッセージを受信したときに HttpSession を存続させる機能を提供します

  • WebSession : Spring WebFlux の WebSession を、アプリケーションコンテナーに依存しない方法で置き換えることができます。

Spring Session が解決する問題を理解する

ユーザーが Web アプリケーションと対話すると、サーバーはセッションを作成してユーザーのアクティビティを追跡します。このセッションには、ユーザー設定、ログインステータス、ショッピングカートの内容などの情報が保存される場合があります。ただし、セッションは通常サーバーのメモリに保存されるため、分散環境では問題が発生する可能性があります。

Spring Session が解決する問題をより深く理解するために、まず次の図を視覚化してみましょう。

In-Memory Sessions
図 1: インメモリセッション

上の図では、各 Spring アプリケーションは、自分自身だけがアクセスできる場所 (通常はサーバーのメモリ内) にセッションを保存していますが、分散環境ではこれが問題になる可能性があります。Spring アプリ #2 がセッション #3 のリクエストを受信した状況を想像してください。セッションデータは Spring アプリ #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 コミュニティと対話する方法についてさらに説明します。

サポート

spring-session タグを使用したスタックオーバーフロー (英語) で質問することで助けを得ることができます。同様に、StackOverflow に関する質問に答えて他の人を手助けすることをお勧めします。

ソースコード

ソースコードは GitHub の github.com/spring-projects/spring-session/ (英語) にあります

課題追跡

github.com/spring-projects/spring-session/issues (英語) で GitHub の課題を追跡します

コントリビュートする

ライセンス

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 3.1+.

  • 他の Spring ライブラリ(必須ではありません)を使用する場合、最低限必要なバージョンは Spring 6.0.x です。

  • @EnableRedisHttpSession には Redis 2.8+ が必要です。これはセッションの有効期限をサポートするために必要です

  • @EnableHazelcastHttpSession には Hazelcast 3.6+ が必要です。これは FindByIndexNameSessionRepository をサポートするために必要です

基本的に、Spring Session は spring-jcl にのみ依存する必要があります。他の Spring 依存関係なしで Spring Session を使用する例については、hazelcast サンプルアプリケーションを参照してください。