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

完了

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

Spring Session を構成する

  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;
        }
    }
    

    Note

    特定の ConfigureRedisAction.NO_OP Spring Bean を構成する理由は、Spring Session により、既定で Redis キースペース通知の設定が試みられるためです。これは、セキュリティで保護され 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.txt というファイルに Cookie が保存されます。

いずれの方法でも、次の例に示すように、HTTP セッション ID を各要求の後にインクリメントする数値で表示する出力が生成されます。

Screenshot that shows example output for session replication.

セッションが正しく持続されているかどうかを確認するには、サーバーを再起動し、セッション データが失われていないことを確かめます。

次のユニットでは、アプリケーションをクラウドにデプロイし、ローカル コンピューターとクラウド サービスの間の HTTP セッションをクラスター化します。