Ćwiczenie — przechowywanie danych sesji HTTP w usłudze Redis

Ukończone

W tej lekcji dodaj aplikację Spring Session do istniejącej aplikacji Spring Boot, aby przechowywać dane sesji HTTP w usłudze Azure Cache for Redis.

Konfigurowanie sesji Spring

  1. Aby dodać obsługę sesji Spring do aplikacji, dodaj następującą zależność w <dependencies> sekcji pliku pom.xml :

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Aby skonfigurować sesję Spring do używania usługi Redis na potrzeby replikacji sesji, dodaj następujący wiersz do pliku src/main/resources/application.properties :

    spring.session.store-type=redis
    

Dodawanie nowego kontrolera do testowania replikacji sesji

Dodaj do aplikacji nowy kontroler REST spring MVC, który będzie używany do testowania replikacji sesji.

  1. Utwórz nowy kontroler o nazwie SessionReplicationController obok pozycji 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;
        }
    }
    

    Uwaga

    Należy skonfigurować określony ConfigureRedisAction.NO_OP fasola Spring, ponieważ domyślnie sesja Spring próbuje skonfigurować powiadomienia o przestrzeni kluczy Redis, które nie będą działać w zabezpieczonych wystąpieniach usługi Azure Cache for Redis. Jeśli potrzebujesz powiadomień o przestrzeni kluczy dla usługi Azure Cache for Redis, musisz zastosować je ręcznie za pomocą interfejsu wiersza polecenia usługi Redis.

    Powiadomienia dotyczące przestrzeni kluczy są przydatne w przypadku obiektów WebSocket, ale zużywają więcej zasobów. Bieżący scenariusz nie używa obiektów WebSocket i nie powinien włączać powiadomień o przestrzeni kluczy.

  2. Uruchom ponownie aplikację, aby skorzystać z replikacji sesji HTTP.

Testowanie replikacji sesji

Sesje HTTP są specyficzne dla użytkownika i są przechowywane za pośrednictwem pliku cookie. Aby sprawdzić, czy sesje działają prawidłowo, można użyć jednej z następujących metod:

  • Wskaż przeglądarkę i http://localhost:8080/session załaduj ponownie stronę kilka razy.

  • Uruchom kilka razy następujący wiersz polecenia:

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

    Poprzednie polecenie zapisuje plik cookie w pliku o nazwie cookie.txt.

Każda metoda generuje dane wyjściowe, które wyświetlają identyfikator sesji HTTP z liczbą, która zwiększa się po każdym żądaniu, jak pokazano w poniższym przykładzie:

Screenshot that shows example output for session replication.

Aby sprawdzić, czy sesje są utrwalane poprawnie, uruchom ponownie serwer i sprawdź, czy dane sesji nie zostaną utracone.

W następnej lekcji wdrożysz aplikację w chmurze i sesje HTTP klastra między maszyną lokalną a usługą w chmurze.