Guide sur le support réactif de la session de printemps: WebSession

1. Introduction

Dans cet article, nous allons apprendre à combiner Spring Session avec Spring WebFlux. Plus précisément, nous allons apprendre à utiliser Spring WebSession, qui associe Spring Session à WebFlux de Spring Boot 2.

Une session de printemps est définie comme «une carte simplifiée de paires nom-valeur». Sessions suit les valeurs qui sont importantes pour une session HTTP comme Users et __Principals. Ainsi, nous pouvons utiliser Session management avec les nouveaux objets réactifs WebFlux Mono et Flux . __Spring Session prend également en charge l’utilisation de différents conteneurs d’applications (plutôt que uniquement de Tomcat).

Pour en savoir plus sur la session de printemps, consultez un autre excellent article ici: Baeldung .

2. Configuration Maven

Maintenant, installons et configurons notre application. Heureusement, configurer notre pom.xml est assez facile à faire. Premièrement, nous devons utiliser Spring Boot 2.x.x avec les dépendances appropriées de la session de printemps. Ajoutez la dernière version via le référentiel Maven:

Session Core]

Ensuite, nous les ajoutons à pom.xml :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-core</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

Ces trois dépendances constituent la configuration minimale requise pour la gestion de session en mémoire. Pour Redis, utilisez:

Session Data Redis]

Ensuite, ajoutez ce qui suit au pom.xml :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.0.5.RELEASE</version>
 </dependency>

Maintenant, configurons nos classes.

3. Configuration en mémoire

Pour utiliser la configuration en mémoire, ajoutez la classe de configuration:

@Configuration
@EnableSpringWebSession
public class SessionConfig {

    @Bean
    public ReactiveSessionRepository reactiveSessionRepository() {
        return new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
    }
}

Cela associe un référentiel (réactif) à votre gestionnaire de session. Il va stocker ces valeurs dans un HashMap .

Il est important de noter que la classe de configuration doit inclure l’annotation @ EnableSpringWebSession _. _

4. Redis Configuration

Maintenant, relions Redis. Pour utiliser Redis afin de gérer __WebSessions, __add la classe de configuration:

@Configuration
@EnableRedisWebSession
public class RedisConfig {

    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }
}

Notez que la classe de configuration doit inclure le _ @ EnableRedisWebSession annotation . Rappelez-vous, nous ne pouvons pas utiliser les annotations @ EnableRedisWebSession et EnableSpringWebSession_ sans provoquer d’exception.

Docker est l’un des moyens les plus simples d’interagir avec Redis. Après l’installation de Docker, il suffit de saisir trois commandes pour le faire. Exécutez la commande pour faire apparaître une instance Redis:

$ docker stop redis
$ docker rm redis
$ docker run -d --name redis -p 6379:6379 redis:4.0.5-alpine

Ensuite, testons notre application.

5. En pratique

Ajoutons maintenant un contrôleur REST réactif à notre application:

@GetMapping("/websession")
public Mono<String> getSession(WebSession session) {
    session.getAttributes().putIfAbsent("note", "Howdy Cosmic Spheroid!");
    return Mono.just((String) session.getAttributes().get("note"));
}

Ensuite, nous pouvons utiliser WebSession en ajoutant un paramètre à nos gestionnaires REST. Nous pouvons obtenir ou définir des valeurs à l’aide de .getAttributes() méthode qui renvoie une carte.

Lançons notre application Spring:

/uploads/websession one-100x28.png%20100w Maintenant, notre application peut être consultée sur localhost: 8080 et présentera la page de connexion Spring. Essayez les identifiants de connexion par défaut ( -u administrateur -p mot de passe__):

lien:/uploads/websession__two.png%201573w[]

Après authentification, nous pouvons modifier les valeurs par défaut de WebSession ( 0 et «Howdy Cosmic Spheroid!» ). Exécuter la commande curl _: _

$ curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X GET http://localhost:8080/websession/test?id=222&note=helloworld

ou visitez l’URL __http://localhost: 8080/websession/test? id = 222

Ensuite, le JSON renvoyé par localhost: 8080/websession affichera les valeurs mises à jour de Session :

Ce noeud final, localhost: 8080/websession, renvoie les attributs WebSession actuels id et note.

6. Conclusion

Nous avons appris comment ajouter Spring WebSession à nos applications WebFlux.

Pour plus d’informations, consultez la grande documentation officielle.

Comme toujours, les exemples de code utilisés dans cet article are disponible sur GitHub.