Eine Anleitung zur reaktiven Spring Session-Unterstützung: WebSession

1. Einführung

In diesem Artikel erfahren Sie, wie Sie Spring Session mit Spring WebFlux kombinieren. Insbesondere erfahren Sie, wie Sie Spring WebSession verwenden, die Spring Session mit dem WebFlux von Spring Boot 2 verbindet.

Eine Spring Session ist definiert als "eine vereinfachte Map von Name-Wert-Paaren". Sessions verfolgt Werte, die für eine HTTP-Sitzung wichtig sind, wie Users und __Principals. Somit können wir das Session -Management zusammen mit den neuen reaktiven WebFlux- Mono- und Flux -Objekten verwenden. __Spring Session unterstützt auch die Verwendung verschiedener Anwendungscontainer (und nicht nur von Tomcat).

Weitere Informationen zur Frühjahrssitzung finden Sie in einem weiteren großartigen Artikel hier auf Baeldung .

2. Maven-Setup

Lassen Sie uns jetzt unsere App einrichten und konfigurieren. Zum Glück ist das Konfigurieren unserer pom.xml ziemlich einfach. Zunächst müssen wir Spring Boot 2.x.x zusammen mit den relevanten Spring Session-Abhängigkeiten verwenden. Fügen Sie die neueste Version über Maven Repository hinzu:

Sitzungskern]

Dann fügen wir sie zu pom.xml hinzu:

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

Diese drei Abhängigkeiten sind die Mindestanforderungen für die Sitzungsverwaltung im Arbeitsspeicher. Verwenden Sie für Redis:

Session Data Redis]

Fügen Sie dann der pom.xml Folgendes hinzu:

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

Lassen Sie uns nun unsere Klassen konfigurieren.

3. In-Memory-Konfiguration

Um die Konfiguration im Arbeitsspeicher zu verwenden, fügen Sie die Konfigurationsklasse hinzu:

@Configuration
@EnableSpringWebSession
public class SessionConfig {

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

Dadurch wird Ihrem Sitzungsmanager ein (reaktives) Repository zugeordnet. Diese Werte werden in einer HashMap gespeichert.

Wichtig ist, dass die Konfigurationsklasse die Annotation @ EnableSpringWebSession enthält.

4. Redis Konfiguration

Jetzt lassen Sie uns Redis anschließen. Um Redis zum Verwalten von ____WebSessions zu verwenden, fügen Sie die Konfigurationsklasse hinzu:

@Configuration
@EnableRedisWebSession
public class RedisConfig {

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

Beachten Sie, dass die Konfigurationsklasse die _ @ EnableRedisWebSession annotation enthalten muss. Erinnerung, wir können die Annotationen @ EnableRedisWebSession und EnableSpringWebSession_ nicht zusammen verwenden, ohne eine Ausnahme zu verursachen.

Docker ist eine der einfachsten Möglichkeiten, mit Redis zu interagieren. Nach der Installation von Docker müssen wir dazu nur drei Befehle eingeben. Führen Sie den Befehl aus, um eine Redis-Instanz aufzurufen:

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

Als nächstes testen wir unsere App.

5. In der Praxis

Jetzt fügen wir unserer App einen reaktiven REST-Controller hinzu:

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

Anschließend können Sie WebSession verwenden, indem Sie unseren REST-Handlern einen Parameter hinzufügen. Wir können Werte über .getAttributes() abrufen oder einstellen. , die eine Map zurückgibt.

Lass uns unsere Spring-App hochfahren:

/uploads/websession one-100x28.png%20100w Nun kann unsere App unter localhost: 8080 eingesehen werden und zeigt die Spring-Anmeldeseite. Versuchen Sie die Standardanmeldeinformationen ( -u admin -p Kennwort__):

Nach der Authentifizierung können wir die Standardwerte für WebSession ( 0 und “Howdy Cosmic Spheroid!” ) Ändern. Curl-Befehl ausführen _: _

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

oder besuchen Sie die URL http://localhost : 8080/web session/test? id = 222 note = helloworld.

Danach wird der von localhost zurückgegebene JSON: 8080/websession aktualisierte Session -Werte anzeigen:

Dieser Endpunkt localhost: 8080/websession gibt die aktuellen WebSession -Attribute id und note. zurück.

6. Fazit

Wir haben gelernt, wie Spring WebSession zu unseren WebFlux-Anwendungen hinzugefügt wird.

Weitere Informationen finden Sie in der großen offiziellen Dokumentation.

Wie immer die in diesem Artikel verwendeten Codebeispiele https://github.com/eugenp/tutorials/tree/master/spring-5-reactive __are verfügbar auf GitHub.]