Spring Boot でセッションタイムアウト時間を変更した話
環境
Spring Boot v1.5.1.RELEASE
および
Spring Boot v2.1.5.RELEASE(2019/7/18 追記)
変更方法
application.properties(または .yml ファイル) を編集する
以下いずれも、モジュールへの変更無しに変更できるが、セッションを作るとき、またはセッションを破棄するときの処理は書けない。
Spring Boot v2.x より前
-
server.session.timeout
プロパティに任意の秒数をセットする
Spring Boot v2.x 以降(2019/7/18 追記)
-
server.servlet.session.timeout
プロパティに値をセットする- 参考 URL: https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/common-application-properties.html
- 上記ドキュメントより、数値にサフィックス(m=分、s=秒)を付ければ分または秒単位に指定できる模様
- 60 秒未満の値を指定しても60 秒未満にはならない(最短 1 分)
- セッションタイムアウト時間は最終的に分で管理されており、60 秒未満は切り捨てられる模様
- 参考 URL1: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java
- 参考 URL2: http://k6i.hateblo.jp/entry/2018/07/14/173704
HttpSessionListener を実装する方法
- HttpSessionListener を実装したクラスを作成
- セッションを作るとき、セッションを破棄するときに行いたい処理を書ける
- 単にセッションタイムアウト時間を変更したいときは冗長か
MySessionListener.java
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// タイムアウト時間を設定
HttpSession session = se.getSession();
session.setMaxInactiveInterval(1800); // タイムアウト秒数を指定。負の数だとセッションタイムアウトしない
// セッション生成時の処理
// ...
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// セッション破棄時の処理
// ...
}
WebAppConfig.java
@Configuration
@Import({MySessionListener.class}) // インポートして有効化
public class WebAppConfig {
}