web-dev-qa-db-ja.com

Spring MVCでのセッションタイムアウトの設定

Springでセッションタイムアウトを指定する方法はありますか? web.xmlでは指定できません。次のようにコントローラでセッションスコープBeanを使用しているので

Spring xmlファイルを使用してコントローラーを構成しました。

class xyzController{

     ABCSessionScopeClass objectWhichWillBeStoredInSession;
}

これも使えない

session.setMaxInactiveInterval(60*60);

これを行う他の方法はありますか?セッションごとに、またはすべてのセッションに対して同時にタイムアウトを設定してもかまいません。

19
JProgrammer

Pure Spring MVC、sevlet context.xmlを使用したソリューション

<mvc:interceptors>
    <bean class="com.xxx.SessionHandler" />
</mvc:interceptors>

ハンドラーアダプター

@Component
public class SessionHandler extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        request.getSession().setMaxInactiveInterval(60*60);
        return true;
    }
}

Spring Securityを使用していると仮定すると、

ログインが成功するたびに、LoginSuccessHandlerを作成して、通常のログインとremember-meにauthentication-success-handlerを指定するのが最善の方法だと思います。

@Service
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(
            HttpServletRequest request,
            HttpServletResponse response,
            Authentication authentication) throws ServletException, IOException {
        request.getSession().setMaxInactiveInterval(60*60);
        super.onAuthenticationSuccess(request, response, authentication);
    }

}

<http auto-config="true" use-expressions="true">
    <form-login login-page="/login"
        authentication-failure-url="/login.hst?error=true"
        **authentication-success-handler-ref="loginSucessHandler"** />
    <logout invalidate-session="true" logout-success-url="/home" logout-url="/logout" />
    <remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/>
    <session-management>
        <concurrency-control max-sessions="1" />
    </session-management>
</http>
24
Jigar Parekh