Spring Session - カスタム Cookie を使用した WebFlux

このガイドでは、WebFlux ベースのアプリケーションでカスタム Cookie を使用するように Spring Session を構成する方法について説明します。このガイドでは、選択したデータストアを使用してプロジェクトに Spring Session がすでに設定されていることを前提としています。例: Redis を使用した HttpSession

完成したガイドは WebFlux カスタム Cookie サンプルアプリケーションにあります。

Spring Session を設定したら、WebSessionIdResolver を Spring Bean として公開することにより、セッション Cookie の書き込み方法をカスタマイズできます。Spring Session はデフォルトで CookieWebSessionIdResolver を使用します。WebSessionIdResolver を Spring として公開する Bean は、@EnableRedisHttpSession のような構成を使用する場合、既存の構成を拡張します。次の例は、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;
	}
1Cookie の名前を JSESSIONID にカスタマイズします。
2Cookie のパスを(コンテキストルートのデフォルトではなく) / になるようにカスタマイズします。
3SameSite cookie ディレクティブを Strict にカスタマイズします。

このセクションでは、webflux-custom-cookie サンプルアプリケーションの操作方法について説明します。

サンプルを実行するには、ソースコードを取得し、次のコマンドを呼び出します。

$ ./gradlew :spring-session-sample-boot-webflux-custom-cookie:bootRun
サンプルを機能させるには、ローカルホストで Redis 2.8+ をインストールします (英語) を実行し、デフォルトのポート (6379) で実行する必要があります。または、Redis サーバーを指すように RedisConnectionFactory を更新することもできます。もう 1 つのオプションは、Docker (英語) を使用してローカルホストで Redis を実行することです。詳細な手順については、Docker Redis リポジトリ (英語) を参照してください。

これで、localhost:8080/ でアプリケーションにアクセスできるようになります。

これで、アプリケーションを使用できます。フォームに次の情報を記入します。

  • 属性名 : ユーザー名

  • 属性値 : rob

次に、属性を設定するボタンをクリックします。これで、テーブルに表示された値が表示されます。

アプリケーションの Cookie を見ると、Cookie が JSESSIONID のカスタム名で保存されていることがわかります。