最新の安定バージョンについては、Spring Session 3.3.1 を使用してください! |
共通構成
このセクションには、すべてまたはほとんどの Spring Session モジュールに適用される共通の設定が含まれています。これには、次の使用例の構成例が含まれています。
セッション Cookie のカスタマイズ
Spring Session を設定したら、CookieSerializer
を Spring Bean として公開することにより、セッション Cookie の書き込み方法をカスタマイズできます。Spring Session には DefaultCookieSerializer
が付属しています。DefaultCookieSerializer
を Spring として公開する Bean は、@EnableRedisHttpSession
のような構成を使用する場合、既存の構成を拡張します。次の例は、Spring Session の Cookie をカスタマイズする方法を示しています。
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("JSESSIONID"); (1)
serializer.setCookiePath("/"); (2)
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); (3)
return serializer;
}
1 | Cookie の名前を JSESSIONID にカスタマイズします。 |
2 | Cookie のパスを(コンテキストルートのデフォルトではなく) / になるようにカスタマイズします。 |
3 | ドメイン名のパターン(正規表現)を ^.?\\.(\\w\\.[a-z]+)$ にカスタマイズします。これにより、ドメインやアプリケーション間でセッションを共有できます。正規表現が一致しない場合、ドメインは設定されず、既存のドメインが使用されます。正規表現が一致する場合、最初のグループ化 [Oracle] (英語) がドメインとして使用されます。これは、child.example.com (英語) へのリクエストがドメインを example.com に設定することを意味します。ただし、localhost:8080/ または 192.168.1.100:8080/ (英語) へのリクエストでは、Cookie が未設定のままであるため、本番環境で変更を加えることなく、開発中も機能します。 |
ドメイン名はレスポンスに反映されるため、有効なドメイン文字のみを照合する必要があります。そうすることで、悪意のあるユーザーが HTTP レスポンスの分割 [Wikipedia] (英語) などの攻撃を実行するのを防ぎます。 |
構成オプション
次の構成オプションが利用可能です。
cookieName
: 使用する Cookie の名前。デフォルト:SESSION
.useSecureCookie
: 安全な Cookie を使用するかどうかを指定します。デフォルト: 作成時のHttpServletRequest.isSecure()
の値を使用します。cookiePath
: クッキーのパス。デフォルト: コンテキストルート。cookieMaxAge
: セッションの作成時に設定される Cookie の最大有効期間を指定します。デフォルト:-1
は、ブラウザーを閉じたときに Cookie を削除する必要があることを示します。jvmRoute
: セッション ID に追加され、Cookie に含まれるサフィックスを指定します。セッションアフィニティのためにルーティングする JVM を識別するために使用されます。一部の実装(つまり、Redis)では、このオプションはパフォーマンス上の利点を提供しません。ただし、特定のユーザーのログを追跡できます。domainName
: Cookie に使用する特定のドメイン名を指定できます。このオプションは理解しやすいですが、多くの場合、開発環境と本番環境の間で異なる構成が必要になります。代わりにdomainNamePattern
を参照してください。domainNamePattern
:HttpServletRequest#getServerName()
からドメイン名を抽出するために使用される大文字と小文字を区別しないパターン。パターンは、Cookie ドメインの値を抽出するために使用される単一のグループ化を提供する必要があります。正規表現が一致しない場合、ドメインは設定されず、既存のドメインが使用されます。正規表現が一致する場合、最初のグループ化 [Oracle] (英語) がドメインとして使用されます。sameSite
:SameSite
cookie ディレクティブの値。SameSite
cookie ディレクティブの直列化を無効にするには、この値をnull
に設定します。デフォルト:Lax
WebFlux のカスタム Cookie
WebSessionIdResolver
を Spring Bean として公開することにより、WebFlux アプリケーションでセッション Cookie を書き込む方法をカスタマイズできます。Spring Session はデフォルトで CookieWebSessionIdResolver
を使用します。次の例は、Spring Session の Cookie をカスタマイズする方法を示しています。
@Bean
public WebSessionIdResolver webSessionIdResolver() {
CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
resolver.setCookieName("JSESSIONID"); (1)
resolver.addCookieInitializer((builder) -> builder.path("/")); (2)
resolver.addCookieInitializer((builder) -> builder.sameSite("Strict")); (3)
return resolver;
}
1 | Cookie の名前を JSESSIONID にカスタマイズします。 |
2 | Cookie のパスを(コンテキストルートのデフォルトではなく) / になるようにカスタマイズします。 |
3 | SameSite cookie ディレクティブを Strict にカスタマイズします。 |