Ć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 sekcji
<dependencies>
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 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; } }
Notatka
Należy skonfigurować określone
ConfigureRedisAction.NO_OP
fasoli 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 dla WebSocketów, 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:
Przejdź w przeglądarce do
http://localhost:8080/session
i kilka razy załaduj stronę ponownie.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ę do chmury, a następnie zorganizujesz sesje HTTP między swoją lokalną maszyną a usługą w chmurze.