Ejercicio: Almacenamiento de datos de sesión HTTP en Redis
En esta unidad agregará Spring Session a la aplicación de Spring Boot para almacenar datos de sesión HTTP en Azure Cache for Redis.
Configuración de Spring Session
Para agregar compatibilidad con Spring Session a la aplicación, agregue la siguiente dependencia en la sección
<dependencies>
del archivo pom.xml:<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
Para configurar Spring Session con el fin de usar Redis para la replicación de sesiones, agregue la siguiente línea al archivo src/main/resources/application.properties:
spring.session.store-type=redis
Adición de un controlador nuevo para probar la replicación de sesiones
Agregue un nuevo controlador REST para Spring MVC a la aplicación con el fin de usarlo para probar la replicación de sesiones.
Cree un nuevo controlador denominado SessionReplicationController junto 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
Configure un bean de Spring
ConfigureRedisAction.NO_OP
específico, porque, de forma predeterminada, Spring Session intenta configurar las notificaciones de espacio de claves de Redis, que no funcionarán en instancias de Azure Cache for Redis protegidas. Si necesita notificaciones de espacio de claves para Azure Cache for Redis, debe aplicarlas manualmente a través de la CLI de Redis.Las notificaciones de espacio de claves son útiles para WebSockets, pero consumen más recursos. En el escenario actual no se usa WebSockets y no deben habilitarse las notificaciones de espacio de claves.
Reinicie la aplicación para beneficiarse de la replicación de sesiones HTTP.
Prueba de la replicación de sesiones
Las sesiones HTTP son específicas del usuario y se mantienen por medio de una cookie. Puede usar cualquiera de los siguientes métodos para probar si las sesiones funcionan correctamente:
Ponga la dirección
http://localhost:8080/session
en el explorador y recargue la página varias veces.Ejecute la siguiente línea de comandos varias veces:
curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
El comando anterior guarda la cookie en un archivo denominado cookie.txt.
Cualquier método produce una salida que muestra el id. de sesión HTTP con un número que se incrementa después de cada solicitud, como se muestra en el siguiente ejemplo:
Para comprobar si las sesiones se conservan correctamente, reinicie el servidor y compruebe que no se han perdido los datos de las sesiones.
En la siguiente unidad implementará la aplicación en la nube y agrupará en clúster las sesiones HTTP entre la máquina local y el servicio en la nube.