Oefening: HTTP-sessiegegevens opslaan in Redis

Voltooid

In deze les voegt u Spring Session toe aan uw bestaande Spring Boot-toepassing om HTTP-sessiegegevens op te slaan in Azure Cache voor Redis.

Spring-sessie configureren

  1. Als u Spring Session-ondersteuning wilt toevoegen aan uw toepassing, voegt u de volgende afhankelijkheid toe in de <dependencies> sectie van uw pom.xml-bestand :

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Als u Spring Session wilt configureren voor het gebruik van Redis voor sessiereplicatie, voegt u de volgende regel toe aan het bestand src/main/resources/application.properties :

    spring.session.store-type=redis
    

Een nieuwe controller toevoegen om sessiereplicatie te testen

Voeg een nieuwe Spring MVC REST-controller toe aan uw toepassing voor het testen van sessiereplicatie.

  1. Maak een nieuwe controller met de naam SessionReplicationController naast 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;
        }
    }
    

    Notitie

    U configureert een specifieke ConfigureRedisAction.NO_OP Spring-bean, omdat Spring Session standaard probeert redis-keyspacemeldingen in te stellen, wat niet werkt op beveiligde Azure Cache voor Redis exemplaren. Als u keyspace-meldingen voor Azure Cache voor Redis nodig hebt, moet u deze handmatig toepassen via de Redis CLI.

    Keyspace-meldingen zijn handig voor WebSockets, maar ze verbruiken meer resources. Het huidige scenario maakt geen gebruik van WebSockets en moet geen keyspace-meldingen inschakelen.

  2. Start uw toepassing opnieuw op om te profiteren van HTTP-sessiereplicatie.

Testsessiereplicatie

HTTP-sessies zijn gebruikersspecifiek en worden onderhouden via een cookie. U kunt een van de volgende methoden gebruiken om te testen of sessies correct werken:

  • Wijs de browser meerdere keren aan http://localhost:8080/session en laad de pagina opnieuw.

  • Voer de volgende opdrachtregel meerdere keren uit:

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

    Met de voorgaande opdracht wordt uw cookie opgeslagen in een bestand met de naam cookie.txt.

Een van beide methoden produceert uitvoer die uw HTTP-sessie-id weergeeft met een getal dat na elke aanvraag wordt verhoogd, zoals wordt weergegeven in het volgende voorbeeld:

Screenshot that shows example output for session replication.

Als u wilt controleren of sessies correct worden bewaard, start u de server opnieuw op en controleert u of uw sessiegegevens niet verloren gaan.

In de volgende les implementeert u uw toepassing in de cloud en clustert u HTTP-sessies tussen uw lokale computer en de cloudservice.