Ćwiczenie — przechowywanie danych sesji HTTP w usłudze Redis
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
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>
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.
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.
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:
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.