演習 - Redis に HTTP セッション データを格納する
このユニットでは、既存の Spring Boot アプリケーションに Spring Session を追加して、AZURE Cache for Redis に HTTP セッション データを格納します。
Spring セッションを構成する
Spring Session のサポートをアプリケーションに追加するには、pom.xml ファイルの
<dependencies>
セクションに次の依存関係を追加します。<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
セッション レプリケーションに Redis を使用するように Spring Session を構成するには、 src/main/resources/application.properties ファイルに次の行を追加します。
spring.session.store-type=redis
セッション レプリケーションをテストする新しいコントローラーを追加する
セッション レプリケーションのテストに使用する新しい Spring MVC REST コントローラーをアプリケーションに追加します。
TodoController の横に SessionReplicationController という名前の新しいコントローラーを作成します。
package com.example.demo; import org.springframework.context.annotation.Bean; import org.springframework.session.data.redis.config.ConfigureRedisAction; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpSession; @RestController @RequestMapping("/") public class SessionReplicationController { @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } @GetMapping("/session") public String session(HttpSession session) { Integer test = (Integer) session.getAttribute("test"); if (test == null) { test = 0; } else { test++; } session.setAttribute("test", test); return "[" + session.getId() + "]-" + test; } }
注
Spring Session は既定で Redis キースペース通知の設定を試行するため、Spring Bean
ConfigureRedisAction.NO_OP
を構成します。これは、セキュリティで保護された Azure Cache for Redis インスタンスでは機能しません。 Azure Cache for Redis のキースペース通知が必要な場合は、Redis CLI を使用して手動で適用する必要があります。キースペース通知は WebSocket に役立ちますが、より多くのリソースを消費します。 現在のシナリオでは WebSocket が使用されていないため、キースペース通知を有効にしないでください。
アプリケーションを再起動して、HTTP セッション レプリケーションを活用します。
セッション レプリケーションをテストする
HTTP セッションはユーザー固有であり、Cookie を介して保持されます。 次のいずれかの方法を使用して、セッションが正常に動作しているかどうかをテストできます。
ブラウザーをポイントして
http://localhost:8080/session
し、ページを何度か再読み込みします。次のコマンド ラインを複数回実行します。
curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
上記のコマンドは、cookie を cookie.txtというファイルに保存します。
どちらのメソッドでも、次の例に示すように、各要求の後にインクリメントされる数値を持つ HTTP セッション ID を表示する出力が生成されます。
セッションが正しく保持されているかどうかを確認するには、サーバーを再起動し、セッション データが失われていないことを確認します。
次のユニットでは、アプリケーションをクラウドにデプロイし、ローカル コンピューターとクラウド サービスの間で HTTP セッションをクラスター化します。