Esercizio - Archiviare i dati delle sessioni HTTP in Redis
In questa unità, si aggiungerà Spring Session all'applicazione Spring Boot esistente per archiviare i dati delle sessioni HTTP nella cache di Azure per Redis.
Configurare Spring Session
Per aggiungere il supporto Spring Session all'applicazione, aggiungere la dipendenza seguente nella sezione
<dependencies>
del file pom.xml:<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
Per configurare Spring Session in modo che utilizzi Redis per la replica delle sessioni, aggiungere la seguente riga al file src/main/resources/application.properties:
spring.session.store-type=redis
Aggiungere un nuovo controller per testare la replica delle sessioni
Aggiungere un nuovo controller Spring MVC REST all'applicazione da usare per il test della replica di sessione.
Creare un nuovo controllere denominato SessionReplicationController accanto a 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; } }
Nota
È possibile configurare un bean Spring specifico
ConfigureRedisAction.NO_OP
perché, per impostazione predefinita, Spring Session tenta di configurare le notifiche keyspace Redis, che non funzioneranno nelle istanze protette di cache di Azure per Redis. Se sono necessarie notifiche keyspace per la cache di Azure per Redis, è necessario applicarle manualmente tramite l'interfaccia della riga di comando di Redis.Le notifiche keyspace sono utili per WebSocket, ma utilizzano più risorse. Lo scenario corrente non usa WebSocket e non deve abilitare le notifiche keyspace.
Riavviare l'applicazione per trarre vantaggio dalla replica di sessione HTTP.
Testare la replica della sessione
Le sessioni HTTP sono specifiche dell'utente e vengono gestite tramite un cookie. È possibile usare uno dei metodi seguenti per verificare se le sessioni funzionano correttamente:
Puntare il browser a
http://localhost:8080/session
e ricaricare la pagina più volte.Eseguire la riga di comando seguente più volte:
curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
Il comando precedente salva il cookie in un file denominato cookie.txt.
Entrambi i metodi producono output che visualizza l'ID sessione HTTP con un numero che incrementa dopo ogni richiesta, come illustrato nell'esempio seguente:
Per controllare se le sessioni vengono correttamente salvate in modo permanente, riavviare il server e verificare che i dati della sessione non siano andati perduti.
Nell'unità successiva, l'applicazione viene distribuita nel cloud e le sessioni HTTP del cluster tra il computer locale e il servizio cloud.