Exercício – Armazenar dados de sessão HTTP no Redis

Concluído

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 a Sessão de Primavera

  1. Para adicionar o suporte do Spring Session ao seu aplicativo, adicione a seguinte dependência na <dependencies> seção do arquivo pom.xml :

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Para configurar o Spring Session para usar o Redis para 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 de sessão

Adicione um novo controlador REST Spring MVC ao aplicativo a ser usado para testar a replicação da sessão.

  1. Crie um novo controlador chamado SessionReplicationController ao lado de 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 habilitar notificações de keyspace.

  2. Reinicie seu aplicativo para se beneficiar da replicação de sessão HTTP.

Testar 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. Você pode usar qualquer 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 várias vezes.

  • Execute a seguinte linha de comando várias 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 incrementa após cada solicitação, conforme mostrado no exemplo a seguir:

Captura de tela que mostra o exemplo de saída para replicação de sessão.

Para verificar se as sessões são mantidas corretamente, reinicie o servidor e verifique se os dados da sessão não foram perdidos.

Na próxima unidade, você implanta seu aplicativo na nuvem e agrupa as sessões HTTP entre o computador local e o serviço de nuvem.