Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【Spring Security】セッションのデフォルト有効期限は30分しかない

f:id:rennnosukesann:20181220183020p:plain

というかServletの仕様ですね。

Spring Securityにおけるセッションの有効期限

Spring Securityでは、セッション情報をJava Servletで扱うようなHttpSessionとして扱えます。またセッションに紐づく情報は、クッキーであるHttpCookieオブジェクトとして扱えます。

    ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
    HttpServletRequest request = attr.getRequest();
    Session session = request.getSession();

    HttpServletResponse response = attr.getResponse();
    Cookie cookie = new Cookie();
    cookie.setPath("/");
    response.addCookie(cookie);

ただしこのセッション、デフォルトでは有効期限が30分となっているため、より長い期限を設けたい場合は明示的に有効期限を定義する必要があります。

簡単な有効期限の設定方法として、 application.properties(yml) に記述する方法があります。

server.session.timeout=3600 // 秒数で指定(負の数で無限)

また別の方法として、 HttpSession に直接指定する方法もあります。

    // セッションタイムアウト時間を秒数で指定
    //(負の数で無限)
    session.setMaxInactiveInterval(3600);

各クッキーの有効期限を設定する

セッションそのもの(セッションID)の有効期限ではなく、セッションに紐づく個々のクッキーの有効期限にも気をつけるべきです。

こちらも同様に application.properties(yml) に記述できます。

server.session.cookie.max-age=3600

一回ハマったはずなのに、完全に忘れてた。。。