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 {
}