SpringBootで開発をするときに、実行→デバッグ→修正→再実行→…という繰り返しを行うのですが、再実行を行うときに毎回ログインし直すのが結構面倒です。そこで、セッション情報を永続化すれば楽になるのではと思い、とりあえず redis でセッション情報を保存するようにしてみました。
前提条件
redisはインストールして利用可能な状態とします。また、基本的な設定は以下の通り初期設定のままとします。
- 接続先:localhost
- ポート番号:6379
また、動作するアプリケーションは SpringSecurity を利用した認証を実行しています。セッション情報の保存確認はログイン前後の状態で確認しました。
設定方法
設定は以下の流れで行います。
- pom.xml に spring-session-data-redis への依存を追加します。
- Redisの接続設定を作成します。
詳細は以下の通りとなります。
pom.xml に spring-session-data-redis への依存を追加する
以下の内容を pom.xml へ追加します。
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>1.0.0.RELEASE</version> </dependency>
Redisの接続設定を作成する
Redisを使用するための設定クラスを作成します。
package com.example; import lombok.Data; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @Configuration @EnableRedisHttpSession public class HttpSessionConfig { @Bean public JedisConnectionFactory connectionFactory() { // ここにRedisへの接続設定を追加する。 JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); // 設定を変更する場合は以下のように必要な設定を行う。 // jedisConnectionFactory.setPort(6379); // jedisConnectionFactory.setHostName("localhost"); // jedisConnectionFactory.setTimeout(60); // jedisConnectionFactory.setPassword("password"); // jedisConnectionFactory.set... return jedisConnectionFactory; } }
なお、ポートの変更などを行う場合は JedisConnectionFactory から取得できるインスタンスのセッターメソッドに値を指定することでポートなどの設定を変更できます。
設定後の動作"
設定を行い、アプリケーションを実行しログインなどの処理を行うとセッション情報がredisに保存されていることが確認できます。
# ログイン前に実行 127.0.0.1:6379> keys * (empty list or set) # ログイン後に実行 127.0.0.1:6379> keys * 1) "spring:session:expirations:1423363200000" 2) "spring:session:expirations:1423363260000" 3) "spring:session:sessions:4db9e023-c8ce-404c-b4a0-9decfdd64ccc" 127.0.0.1:6379>