演習 - Redis に HTTP セッション データを格納する

完了

このユニットでは、既存の Spring Boot アプリケーションに Spring Session を追加して、AZURE Cache for Redis に HTTP セッション データを格納します。

Spring セッションを構成する

  1. Spring Session のサポートをアプリケーションに追加するには、pom.xml ファイルの <dependencies> セクションに次の依存関係を追加します。

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. セッション レプリケーションに Redis を使用するように Spring Session を構成するには、 src/main/resources/application.properties ファイルに次の行を追加します。

    spring.session.store-type=redis
    

セッション レプリケーションをテストする新しいコントローラーを追加する

セッション レプリケーションのテストに使用する新しい Spring MVC REST コントローラーをアプリケーションに追加します。

  1. 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 が使用されていないため、キースペース通知を有効にしないでください。

  2. アプリケーションを再起動して、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 セッションをクラスター化します。