Oefening: HTTP-sessiegegevens opslaan in Redis
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
Als u Spring Session-ondersteuning wilt toevoegen aan uw toepassing, voegt u de volgende afhankelijkheid toe in de sectie
<dependencies>
van uw pom.xml-bestand:<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
Als u Spring Session wilt configureren voor het gebruik van Redis voor sessiereplicatie, voegt u de volgende regel toe aan de src/main/resources/application.properties bestand:
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.
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
Je configureert een specifieke
ConfigureRedisAction.NO_OP
Spring-bean, omdat Spring Session standaard probeert Redis-keyspacemeldingen in te stellen, wat niet werkt voor beveiligde exemplaren van Azure Cache voor Redis. Als u keyspacemeldingen nodig hebt voor Azure Cache voor Redis, 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.
Start uw toepassing opnieuw op om te profiteren van HTTP-sessiereplicatie.
Replicatie van testsessie
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 uw browser aan op
http://localhost:8080/session
en laad de pagina meerdere keren 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:
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.