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:
Boot Starter WebFlux]** https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security [The
Spring Boot Sicherheit] Starter ** https://mvnrepository.com/artifact/org.springframework.session/spring-session-core [Spring
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:
Boot Starter Data Redis]** https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis [Spring
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¬e=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.]