Übung: Speichern von HTTP-Sitzungsdaten in Redis

Abgeschlossen

In dieser Einheit fügen Sie Spring Session Ihrer vorhandenen Spring Boot-Anwendung hinzu, um HTTP-Sitzungsdaten in Azure Cache for Redis zu speichern.

Konfigurieren von Spring Session

  1. Wenn Spring Session in Ihrer Anwendung unterstützt werden soll, fügen Sie die folgende Abhängigkeit im <dependencies>-Abschnitt der Datei pom.xml hinzu:

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Wenn Sie Spring Session für die Verwendung von Redis für die Sitzungsreplikation konfigurieren möchten, fügen Sie die folgende Zeile in die Datei src/main/resources/application.properties ein:

    spring.session.store-type=redis
    

Hinzufügen eines neuen Controllers zum Testen der Sitzungsreplikation

Fügen Sie Ihrer Anwendung einen neuen Spring-MVC-REST-Controller hinzu, der zum Testen der Sitzungsreplikation verwendet werden soll.

  1. Erstellen Sie einen neuen Controller namens SessionReplicationController neben TodoController.

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

    Hinweis

    Sie konfigurieren eine bestimmte ConfigureRedisAction.NO_OP-Spring-Bean, da Spring Session standardmäßig versucht, Redis-Keyspacebenachrichtigungen einzurichten, die bei geschützten Azure Cache for Redis-Instanzen nicht funktionieren. Wenn Sie Keyspacebenachrichtigungen für Azure Cache for Redis benötigen, müssen Sie diese manuell über die Redis-CLI anwenden.

    Keyspacebenachrichtigungen sind für WebSockets nützlich, verbrauchen jedoch mehr Ressourcen. Das aktuelle Szenario verwendet keine WebSockets und sollte keine Keyspacebenachrichtigungen aktivieren.

  2. Starten Sie Ihre Anwendung neu, um von der HTTP-Sitzungsreplikation zu profitieren.

Testen der Sitzungsreplikation

HTTP-Sitzungen sind benutzerspezifisch und werden über ein Cookie verwaltet. Sie können eine der folgenden Methoden verwenden, um zu testen, ob Sitzungen ordnungsgemäß funktionieren:

  • Rufen Sie mit Ihrem Browser http://localhost:8080/session auf, und laden Sie die Seite mehrmals neu.

  • Führen Sie die folgende Befehlszeile mehrmals aus:

    curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
    

    Der obige Befehl speichert Ihr Cookie in einer Datei namens cookie.txt.

Beide Methoden erzeugen eine Ausgabe, die Ihre HTTP-Sitzungs-ID mit einer Zahl anzeigt, die nach jeder Anforderung erhöht wird, wie im folgenden Beispiel gezeigt:

Screenshot that shows example output for session replication.

Wenn Sie überprüfen möchten, ob die Sitzungen ordnungsgemäß gespeichert werden, starten Sie Ihren Server neu, und überprüfen Sie, ob die Sitzungsdaten noch vorhanden sind.

In der nächsten Lerneinheit stellen Sie Ihre Anwendung in der Cloud bereit und clustern HTTP-Sitzungen zwischen Ihrem lokalen Computer und dem Clouddienst.