Exercício – Armazenar dados de sessão HTTP no Redis
Nesta unidade, adicione o Spring Session ao aplicativo Spring Boot existente para armazenar dados de sessão HTTP no Cache do Azure para Redis.
Configurar o Spring Session
Para adicionar o suporte do Spring Session ao aplicativo, adicione a seguinte dependência à seção
<dependencies>
do arquivo pom.xml:<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
Para configurar o Spring Session a fim de usar o Redis para a replicação de sessão, adicione a seguinte linha ao arquivo src/main/resources/application.properties:
spring.session.store-type=redis
Adicionar um novo controlador para testar a replicação da sessão
Adicione um controlador Spring MVC REST ao aplicativo para usar no teste da replicação de sessão.
Crie um controlador chamado SessionReplicationController próximo 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; } }
Observação
Você configura um bean Spring
ConfigureRedisAction.NO_OP
específico porque, por padrão, o Spring Session tenta configurar as notificações de keyspace do Redis, que não funcionarão em instâncias protegidas do Cache do Azure para Redis. Se você precisar de notificações de keyspace para o Cache do Azure para Redis, aplique-as manualmente por meio da CLI do Redis.As notificações de keyspace são úteis para WebSockets, mas consomem mais recursos. O cenário atual não usa WebSockets e não deve permitir notificações de keyspace.
Reinicie o aplicativo para se beneficiar da replicação de sessão HTTP.
Testar a replicação de sessão
As sessões HTTP são específicas do usuário e são mantidas por meio de um cookie. É possível usar um dos seguintes métodos para testar se as sessões estão funcionando corretamente:
Aponte o navegador para
http://localhost:8080/session
e recarregue a página diversas vezes.Execute a seguinte linha de comando diversas vezes:
curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
O comando anterior salva o cookie em um arquivo chamado cookie.txt.
Qualquer um dos métodos produz uma saída que exibe sua ID de sessão HTTP com um número que aumenta após cada solicitação, conforme mostrado no seguinte exemplo:
Para verificar se as sessões são persistidas corretamente, reinicie o servidor e verifique se os dados da sessão não foram perdidos.
Na próxima unidade, você implantará o aplicativo na nuvem e agrupará sessões HTTP entre o computador local e o serviço de nuvem.