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

Concluído

Nesta unidade, adicione o Spring Session ao seu aplicativo Spring Boot existente para armazenar dados de sessão HTTP no Cache do Azure para Redis.

Configurar o Spring Session

  1. Para adicionar suporte ao Spring Session ao seu aplicativo, adicione a <dependencies> seguinte dependência na seção do seu 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 da sessão

Adicione um novo controlador REST Spring MVC ao seu aplicativo para usar na replicação da sessão de teste.

  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;
        }
    }
    

    Nota

    Você configura um Spring bean específico ConfigureRedisAction.NO_OP porque, por padrão, o Spring Session tenta configurar notificações de espaço de chave Redis, que não funcionarão em instâncias seguras do Cache do Azure para Redis. Se você precisar de notificações de espaço de chave para o Cache do Azure para Redis, deverá aplicá-las manualmente por meio da CLI do Redis.

    As notificações do 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 espaço de chave.

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

Replicação de sessão de teste

As sessões HTTP são específicas do utilizador e são mantidas através de um cookie. Você pode usar um dos seguintes métodos para testar se as sessões estão funcionando corretamente:

  • Aponte o navegador e http://localhost:8080/session 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 seu 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 exemplo a seguir:

Screenshot that shows example output for session replication.

Para verificar se as sessões persistem 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 sessões HTTP entre sua máquina local e o serviço de nuvem.