web-dev-qa-db-fra.com

définition du délai d'expiration de session dans Spring MVC

Existe-t-il un moyen de spécifier le délai d'expiration de session au printemps? je ne peux pas le spécifier dans web.xml. Comme j'utilise le bean de portée de session dans le contrôleur comme suit

J'ai configuré le contrôleur via des fichiers xml de printemps.

class xyzController{

     ABCSessionScopeClass objectWhichWillBeStoredInSession;
}

Je ne peux pas l'utiliser non plus

session.setMaxInactiveInterval(60*60);

Existe-t-il une autre façon de procéder? Cela ne me dérange pas de définir le délai d'expiration par session ou pour toutes les sessions en même temps.

19
JProgrammer

Solution utilisant Pure Spring MVC, sevlet context.xml

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

Adaptateur de gestionnaire

@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;
    }
}

En supposant que vous utilisez la sécurité du printemps,

Pour chaque connexion réussie, je pense que la meilleure façon est de créer LoginSuccessHandler et de spécifier l'authentification-succès-gestionnaire pour la connexion normale ainsi que pour me souvenir de moi.

@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