SpringBootでセッションをredisに保存する

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> 

参考にした情報

Spring Session