1. Введение
В этой статье мы узнаем, как объединить Spring Session с Spring WebFlux. В частности, мы узнаем, как использовать Spring WebSession, который объединяет Spring Session с WebFlux Spring Boot 2.
Spring Session
определяется как «упрощенная карта
пар имя-значение». Сеансы
отслеживают значения, которые важны для сеанса HTTP, такие как Users
и Principals.
Таким образом, мы можем использовать Session
management вместе с новыми реактивными объектами WebFlux Mono
и Flux
.
Spring Session также поддерживает использование различных контейнеров приложений (а не только Tomcat).
Чтобы узнать больше о Spring Session, ознакомьтесь с другой отличной статьей здесь, на ForEach .
2. Настройка Мавена
Теперь давайте настроим и настроим наше приложение. К счастью, настроить наш pom.xml
довольно легко. Во-первых, нам нужно использовать Spring Boot 2.xx вместе с соответствующими зависимостями Spring Session. Добавьте новейшую версию через репозиторий Maven:
Затем мы добавляем их в pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
<version>2.5.1</version>
</dependency>
Эти три зависимости являются минимальными требованиями для управления сеансами в памяти. Для Redis используйте:
Затем добавьте в pom.xml следующее
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.5.1</version>
</dependency>
Теперь давайте настроим наши классы.
3. Конфигурация в памяти
Чтобы использовать конфигурацию в памяти, добавьте класс конфигурации:
@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
.
Помните, что мы не можем использовать аннотации @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:
Теперь наше приложение можно просмотреть на локальном хосте: 8080
, и оно представит страницу входа в Spring. Попробуйте учетные данные для входа по умолчанию ( -u admin -p пароль
):
После аутентификации мы можем изменить значения WebSession
по умолчанию ( 0
и «Привет, космический сфероид!»
). Запустите команду 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¬e=helloworld
. После этого JSON, возвращаемый с localhost:8080/websession
, будет отображать обновленные значения сеанса
:
Эта конечная точка, localhost:8080/websession,
возвращает текущий идентификатор
атрибутов WebSession
и примечание.
6. Заключение
Мы узнали, как добавить Spring WebSession в наши приложения WebFlux. Для получения дополнительной информации ознакомьтесь с отличной официальной документацией.
Как всегда, образцы кода, использованные в этой статье , доступны на GitHub.