1. Вступление
В этой статье мы узнаем, как объединить Spring Session с Spring WebFlux. В частности, мы узнаем, как использовать Spring WebSession, который объединяет Spring Session с Spring Boot 2 WebFlux.
Spring Session определяется как «упрощенная Map пар имя-значение». Sessions отслеживает значения, которые важны для сеанса HTTP, например Users и _Principals. Таким образом, мы можем использовать Session management вместе с новыми реактивными объектами WebFlux Mono and Flux _ . ____Spring Session также поддерживает использование различных контейнеров приложений (а не только Tomcat).
Чтобы узнать больше о Spring Session, прочитайте еще одну замечательную статью здесь на Baeldung .
2. Maven Setup
Теперь давайте настроим и настроим наше приложение. К счастью, настроить наш pom.xml довольно просто. Во-первых, нам нужно использовать Spring Boot 2.x.x вместе с соответствующими зависимостями Spring Session. Добавьте самую новую версию через Maven Repository:
Загрузочный стартер WebFlux]** https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security [TheThe
Весенний ботинок Безопасность] Автор ** https://mvnrepository.com/artifact/org.springframework.session/spring-session-core [Spring
Сессия ядро]
Затем мы добавляем их в 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>
Эти три зависимости являются минимальными требованиями для управления сеансом в памяти. Для Redis используйте:
Boot Starter Data Redis]** https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis [Spring
Данные сеанса Redis]
Затем добавьте следующее в 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>
Теперь давайте настроим наши классы.
3. Конфигурация в памяти
Чтобы использовать конфигурацию в памяти, добавьте класс config:
@Configuration
@EnableSpringWebSession
public class SessionConfig {
@Bean
public ReactiveSessionRepository reactiveSessionRepository() {
return new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
}
}
Это связывает (реактивный) репозиторий с вашим менеджером сеансов. Эти значения будут сохранены в HashMap .
Важно отметить, что класс конфигурации должен включать аннотацию @ EnableSpringWebSession _. _
4. Конфигурация Redis
Теперь давайте подключим Redis. Чтобы использовать Redis для управления __WebSessions, __адобавьте класс конфигурации:
@Configuration
@EnableRedisWebSession
public class RedisConfig {
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory();
}
}
Обратите внимание, что класс конфигурации должен включать _ @ EnableRedisWebSession annotation . Помните, мы не можем использовать аннотации @ EnableRedisWebSession и EnableSpringWebSession_ вместе без исключения.
Docker - один из самых простых способов взаимодействия с Redis. После установки Docker нам нужно всего лишь ввести три команды для этого. Запустите команду, чтобы вызвать экземпляр Redis:
$ docker stop redis
$ docker rm redis
$ docker run -d --name redis -p 6379:6379 redis:4.0.5-alpine
Далее, давайте проверим наше приложение.
5. На практике
Теперь давайте добавим реактивный REST-контроллер в наше приложение:
@GetMapping("/websession")
public Mono<String> getSession(WebSession session) {
session.getAttributes().putIfAbsent("note", "Howdy Cosmic Spheroid!");
return Mono.just((String) session.getAttributes().get("note"));
}
Затем мы можем использовать WebSession , добавив параметр в наши обработчики REST. Мы можем получить или установить значения, используя .getAttributes() метод, который возвращает карту.
Давайте раскрутим наше приложение Spring:
ссылка:/uploads/websession one-100x28.png%20100w[]Теперь наше приложение можно просмотреть по адресу localhost: 8080 , и на нем будет представлена страница входа в Spring. Попробуйте использовать учетные данные по умолчанию ( -u admin -p пароль__):
ссылка:/uploads/websession__two.png%201573w[]
После аутентификации мы можем изменить значения WebSession по умолчанию ( 0 и «Howdy Cosmic Spheroid!» ). Запустите команду curl _: _
$ curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X GET http://localhost:8080/websession/test?id=222¬e=helloworld
или посетите URL __http://localhost: 8080/websession/test? id = 222
После этого JSON, возвращенный из localhost: 8080/websession , будет отображать обновленные значения Session :
ссылка:/uploads/websession__three-1-100x20.png%20100w[]
Эта конечная точка, localhost: 8080/websession, возвращает текущие атрибуты WebSession id и note.
6. Заключение
Мы узнали, как добавить Spring WebSession в наши приложения WebFlux.
Для получения дополнительной информации ознакомьтесь с отличной официальной документацией.
Как всегда, примеры кода, используемые в этой статье are доступно на GitHub.