1. введение
В этой статье мы узнаем, как объединить весеннюю сессию с весенним веб-потоком. В частности, мы узнаем, как использовать Spring Web Session, который объединяет Spring Session с WebFlux Spring Boot 2.
Весенняя Сессия определяется как “упрощенная Карта пар имя-значение”. Сеансы отслеживают значения, важные для сеанса HTTP, такие как Пользователи и Участники. Таким образом, мы можем использовать Session management вместе с новым реактивным веб-потоком Mono и Flux objects . Spring Session также поддерживает использование различных контейнеров приложений (а не только Tomcat).
Чтобы узнать больше о весенней сессии, ознакомьтесь с еще одной замечательной статьей здесь, на Baeldung .
2. Настройка Maven
Теперь давайте настроим и настроим наше приложение. К счастью, настройка вашего pom.xml это довольно легко сделать. Во-первых, нам нужно использовать Spring Boot 2.x.x вместе с соответствующими зависимостями весеннего сеанса. Добавьте новейшую версию через репозиторий Maven:
- Веб-поток Пружинного Загрузочного стартера
- Безопасность пружинной загрузки Стартер
- Ядро Весенней сессии
Затем мы добавим их в pom.xml :
org.springframework.boot spring-boot-starter-webflux 2.4.0 org.springframework.boot spring-boot-starter-security 2.4.0 org.springframework.session spring-session-core 2.4.0
Эти три зависимости являются минимальными требованиями для управления сеансами в памяти. Для Redis используйте:
Затем добавьте следующее в pom.xml :
org.springframework.boot spring-boot-starter-data-redis 2.4.0 org.springframework.session spring-session-data-redis 2.4.0
Теперь давайте настроим наши классы.
3. Конфигурация В памяти
Чтобы использовать конфигурацию в памяти, добавьте класс config:
@Configuration @EnableSpringWebSession public class SessionConfig { @Bean public ReactiveSessionRepository reactiveSessionRepository() { return new ReactiveMapSessionRepository(new ConcurrentHashMap<>()); } }
Это связывает (реактивный) репозиторий с вашим менеджером сеансов. Он сохранит эти значения в HashMap .
Важно отметить, что класс конфигурации должен включать в себя @EnableSpringWebSession аннотацию .
4. Конфигурация Redis
А теперь давайте подключим Редиса. Чтобы использовать Redis для управления веб-сеансами, добавьте класс конфигурации:
@Configuration @EnableRedisWebSession public class RedisConfig { @Bean public LettuceConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(); } }
Обратите внимание, что класс конфигурации должен включать в себя @EnableRedisWebSession аннотацию . Помните, что мы не можем использовать @EnableRedisWebSession и Включить весеннюю веб-сессию аннотации вместе, не вызывая исключения.
Docker – один из самых простых способов взаимодействия с Redis. После установки Docker нам нужно ввести только три команды, чтобы сделать это. Выполните команду, чтобы вызвать экземпляр Redis:
$ docker stop redis $ docker rm redis $ docker run -d --name redis -p 6379:6379 redis:4.0.5-alpine
Далее, давайте протестируем наше приложение.
5. На практике
Теперь давайте добавим реактивный RestController в наше приложение:
@GetMapping("/websession") public MonogetSession(WebSession session) { session.getAttributes().putIfAbsent("note", "Howdy Cosmic Spheroid!"); return Mono.just((String) session.getAttributes().get("note")); }
Затем мы можем использовать WebSession , добавив параметр в наши обработчики REST. Мы можем получить или установить значения с помощью метода .GetAttributes () , который возвращает карту.
Давайте раскрутим наше весеннее приложение:
Теперь наше приложение можно посмотреть по адресу localhost:8080 и представит весеннюю страницу входа в систему. Попробуйте использовать учетные данные для входа по умолчанию ( -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 , отобразит обновленные Session значения:
Эта конечная точка, localhost:8080/веб-сеанс, возвращает текущий Веб-сеанс атрибуты id и примечание.
6. Заключение
Мы узнали, как добавить весеннюю веб-сессию в наши приложения Web Flux. Для получения дополнительной информации ознакомьтесь с отличной официальной документацией.
Как всегда, примеры кода, используемые в этой статье , доступны на GitHub.