2012-08-22 49 views
16

¿Hay alguna forma de especificar el tiempo de espera de la sesión en Spring? No puedo especificarlo en web.xml. Como estoy usando bean de alcance de sesión en el controlador de la siguiente maneraconfigurando el tiempo de espera de la sesión en Spring MVC

He configurado el controlador a través de los archivos xml de muelles.

class xyzController{ 

    ABCSessionScopeClass objectWhichWillBeStoredInSession; 
} 

no puedo usar esto tampoco

session.setMaxInactiveInterval(60*60); 

¿Hay alguna otra manera de hacerlo. No me importa configurar el tiempo de espera por sesión o para todas las sesiones al mismo tiempo.

+0

Me gustaría saber esto también. Cuando revisé esto, la * única * forma en que pude cambiarlo fue con la configuración en web.xml (o server.xml). – nickdos

+0

¿Qué pasa con setMaxInactiveInterval, no es parte de la API de servlet? Algunas herramientas de seguridad de primavera llaman session.invalidate directamente, por ejemplo, y no hay problemas con ella. –

+1

@BorisTreukhov No tiene nada de malo. Esta es la última opción. Solo quiero asegurarme de que hay alguna otra alternativa, como especificar en el archivo de configuración o algo así. – JProgrammer

Respuesta

0

yo no era capaz de encontrar ninguna forma de especificar el valor de tiempo de espera de sesión a través de los archivos de configuración de la primavera. Estaba usando el bean <aop:scoped-proxy> para no tener que administrar el valor de lectura/escritura/objeto a la sesión. Ahora, también quiero lo mismo para establecer el valor de tiempo de espera de la sesión, sin usar la API de servlets. Pero parece que no hay forma de especificarlo más que el archivo web.xml. Así que terminé usando servlet api request.getSession() para establecer el período de tiempo de espera. Externalicé el valor del tiempo para poder cambiarlo fácilmente sin volver a compilar el código. Si alguien encuentra un mejor enfoque, no dude en publicarlo. Si se encuentra mejor, puedo aceptarlo como una respuesta.

+0

Puede especificar el tiempo de espera de la sesión utilizando web.xml como se describe aquí: http://stackoverflow.com/questions/12932589/changing-the-default-session-timeout-of-a-spring-web-application –

+1

Si usted está con Spring Boot, puede especificar el tiempo de espera de la sesión en application.properties: server.session-timeout = 86400 –

21

solución usando puro Spring MVC, context.xml sevlet adaptador

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

Handler

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

Suponiendo que está utilizando seguridad de primavera,

Para cada inicio de sesión correcto creo que mejor manera es para crear LoginSuccessHandler y especificar authentication-success-handler para el inicio de sesión normal, así como remember-me.

@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> 
+0

No estoy usando la seguridad de Spring. – JProgrammer

+0

si no está utilizando la seguridad de primavera, entonces también puede utilizar y HandlerInterceptorAdapter. con Spring MVC. –

Cuestiones relacionadas