Exercice - Stocker des données de session HTTP dans Redis

Effectué

Dans cette unité, vous allez ajouter Spring Session à votre application Spring Boot existante pour stocker des données de session HTTP dans Azure Cache pour Redis.

Configurer Spring Session

  1. Pour ajouter la prise en charge de Spring Session à votre application, ajoutez la dépendance suivante dans la section <dependencies> de votre fichier pom.xml :

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Pour configurer Spring Session afin qu’il utilise Redis pour la réplication de session, ajoutez la ligne suivante au fichier src/main/resources/application.properties :

    spring.session.store-type=redis
    

Ajouter un nouveau contrôleur pour tester la réplication de session

Ajoutez un nouveau contrôleur REST Spring MVC à votre application pour tester la réplication de session.

  1. Créez un contrôleur appelé SessionReplicationController à côté 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;
        }
    }
    

    Notes

    Vous devez configurer un bean Spring ConfigureRedisAction.NO_OP spécifique car, par défaut, Spring Session tente de configurer des notifications d’espace de clés Redis qui ne fonctionnent pas sur des instances Azure Cache for Redis sécurisées. Si vous avez besoin de notifications d’espace de clés pour Azure Cache pour Redis, vous devez les appliquer manuellement par le biais de l’interface CLI Redis.

    Les notifications d’espace de clés sont utiles pour les WebSockets, mais elles consomment davantage de ressources. Le scénario actuel n’utilise pas les WebSockets et ne doit pas activer les notifications d’espace de clés.

  2. Redémarrez votre application pour tirer parti de la réplication de session HTTP.

Tester la réplication de session

Les sessions HTTP sont spécifiques à l’utilisateur et sont conservées par le biais d’un cookie. Vous pouvez utiliser l’une des méthodes suivantes pour tester le fonctionnement des sessions :

  • Pointez votre navigateur sur http://localhost:8080/session et rechargez la page plusieurs fois.

  • Exécutez la ligne de commande suivante plusieurs fois :

    curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
    

    La commande précédente enregistre votre cookie dans un fichier appelé cookie.txt.

L’une ou l’autre méthode produit une sortie qui affiche votre ID de session HTTP avec un nombre qui s’incrémente après chaque demande, comme l’illustre l’exemple suivant :

Screenshot that shows example output for session replication.

Pour vérifier la persistance des sessions, redémarrez votre serveur et vérifiez que vos données de session ne sont pas perdues.

Dans l’unité suivante, vous allez déployer votre application dans le cloud et mettre en cluster des sessions HTTP entre votre ordinateur local et le service cloud.