2010-06-02 18 views
39

Necesito darle a mi usuario una interfaz web para cambiar el intervalo de tiempo de espera de la sesión. Por lo tanto, las diferentes instalaciones de la aplicación web podrían tener diferentes tiempos de espera para sus sesiones, pero su web.xml no puede ser diferente.¿Cómo se establece el tiempo de espera de la sesión dinámicamente en aplicaciones web Java?

¿Hay alguna manera de establecer el tiempo de espera de la sesión programáticamente, de modo que pueda usar, por ejemplo, ServletContextListener.contextInitialized() para leer el intervalo configurado y configurarlo al iniciar la aplicación?

Muchas gracias.

Respuesta

63

En lugar de usar un ServletContextListener, use un HttpSessionListener. En el método sessionCreated(), puede establecer el tiempo de espera de la sesión programáticamente.

public class MyHttpSessionListener implements HttpSessionListener{ 
    public void sessionCreated(HttpSessionEvent event){ 
    event.getSession().setMaxInactiveInterval(15*60); //in seconds 
    } 
    public void sessionDestroyed(HttpSessionEvent event){} 
} 

Y no se olvide de definir el oyente en el descriptor de despliegue:

<webapp> 
... 
    <listeners> 
    <listener-class>com.example.MyHttpSessionListener</listener-class> 
    </listeners> 
</webapp> 

Sin embargo, yo recomendaría la creación de diferentes archivos web.xml para cada aplicación y definir el tiempo de espera de sesión de ahí:

<webapp> 
... 
    <session-config> 
    <session-timeout>15</session-timeout> <!-- in minutes --> 
    </session-config> 
</webapp> 
+0

¿Hay alguna manera de reemplazar el estático 15 * 60 por una variable pasada de la página web al oyente http (para elegir los tiempos de espera que afectarán todas las sesiones nuevas creadas?)? – user2133558

31

¿Hay una manera de establecer el tiempo de espera de sesión mediante programación

Básicamente, hay tres formas de establecer el valor de sesión de tiempo de espera:

  • utilizando el session-timeout en el archivo estándar web.xml ~ o ~
  • en ausencia de este elemento, obteniendo el valor session-timeout predeterminado del servidor (y, por lo tanto, configurándolo en el nivel del servidor) ~ o ~
  • mediante programación utilizando el método HttpSession. setMaxInactiveInterval(int seconds) en su Servlet o JSP.

Pero tenga en cuenta que la opción más adelante establece el valor de tiempo de espera para la sesión actual , esto no es un valor global.

0

Como se le dijo a otra impresora, puede cambiar en un Listener de sesión. Pero puede cambiarlo directamente en su servlet, por ejemplo.

+2

Sí, es posible, sin embargo, no garantiza "cuándo" sucede .. Y depende del ciclo de vida de su servlet ... es una opción .. ok .. Nore: El oyente lo configurará siempre en crear evento. –

Cuestiones relacionadas