Springセッションのリアクティブサポートガイド:WebSession

1前書き

この記事では、Spring SessionとSpring WebFluxを組み合わせる方法を学びます。具体的には、Spring SessionとSpring Boot 2のWebFluxを統合するSpring WebSessionの使い方を学びます。

Springの Session は、「名前と値のペアの簡略化された Map 」として定義されます。 セッション ユーザー やプリンシパルのようなHTTPセッションにとって重要な値を追跡します。これで、 Session 管理を新しいリアクティブWebFlux __Mono Flux objects と共に使用できます。 __Spring Sessionは(Tomcatだけではなく)異なるアプリケーションコンテナの使用もサポートします。

Spring Sessionの詳細については、https://www.baeldung.com/spring-session[Baeldung]にあるもう1つの素晴らしい記事を参照してください。

2 Mavenのセットアップ

それでは、我々のアプリをセットアップして設定しましょう。ありがたいことに、__pom.xmlを設定するのはとても簡単です。まず、Spring Boot 2.x.xと関連するSpring Sessionの依存関係を使用する必要があります。 Mavenリポジトリから最新バージョンを追加してください。

セッションコア]

次に、それらを 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>

これら3つの依存関係は、インメモリセッション管理の最小要件です。 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インメモリ構成

インメモリ設定を使用するには、設定クラスを追加します。

@Configuration
@EnableSpringWebSession
public class SessionConfig {

    @Bean
    public ReactiveSessionRepository reactiveSessionRepository() {
        return new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
    }
}

それはあなたのセッションマネージャと(リアクティブ)リポジトリを関連付けます。それらの値を HashMap に格納します。

重要なことに、設定クラスは @ EnableSpringWebSession アノテーション __. __を含まなければなりません。

4 Redisの設定

それでは、Redisを接続しましょう。 Redisを使用して __WebSessionsを管理するには、設定クラスを __addします。

@Configuration
@EnableRedisWebSession
public class RedisConfig {

    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }
}

設定クラスには、 __ @ EnableRedisWebSession annotation が含まれている必要があります。 @ EnableRedisWebSession アノテーションと EnableSpringWebSession__アノテーションを一緒に使用して例外を発生させることはできません。

Docker はRedisと対話するための最も簡単な方法の1つです。 Dockerをインストールした後は、3つのコマンドを入力するだけで済みます。コマンドを実行して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"));
}

それから、RESTハンドラにパラメータを追加することで WebSession を使うことができます。 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/server/WebSession.html#getAttributes-- [ .getAttributes() を使用して値を取得または設定できます。 Mapを返すメソッド。

Springアプリをスピンアップしましょう。

/uploads/websession one-100x28.png%20100w これで、私たちのアプリはlocalhost:8080 に表示され、Springのログインページが表示されます。デフォルトのログイン認証情報( -u admin -p password__)を試してください。

リンク:/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をご覧ください。

その後、 localhost:8080/websession から返されたJSONは、更新された Session 値を表示します。

リンク:/uploads/websession__three-1-100x20.png%20100w[]

そのエンドポイント、 localhost:8080/websession、 は現在の WebSession 属性 id および note. を返します。

6. 結論

Spring WebSessionをWebFluxアプリケーションに追加する方法を学びました。

詳細については、すばらしい公式文書を調べてください。

いつものように、この記事で使用されているコード・サンプル are GitHubで入手できます。