Руководство по реактивной поддержке Spring Session: WebSession

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:

Весенний ботинок Безопасность] Автор ** 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 используйте:

Данные сеанса 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&note=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.