java - sitios - lenguaje pagina web dinamica
¿Cómo establecer el tiempo de espera de la sesión de forma dinámica en las aplicaciones web de Java? (3)
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.
¿Hay alguna manera de establecer el tiempo de espera de la sesión programáticamente, para poder usar, por ejemplo, ServletContextListener.contextInitialized()
para leer el intervalo configurado y configurarlo al inicio de la aplicación?
Muchas gracias.
¿Hay alguna manera de establecer el tiempo de espera de la sesión programáticamente
Básicamente hay tres formas de establecer el valor de tiempo de espera de la sesión:
- utilizando el
session-timeout
lasession-timeout
en el archivoweb.xml
estándar ~ 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
HttpSession. setMaxInactiveInterval(int seconds)
HttpSession. setMaxInactiveInterval(int seconds)
en su Servlet o JSP.
Pero tenga en cuenta que la opción posterior establece el valor de tiempo de espera para la sesión actual , esta no es una configuración global.
Como se le contó a otros redactores, puede cambiar en un Listener de sesión. Pero puede cambiarlo directamente en su servlet, por ejemplo.
getRequest().getSession().setMaxInactiveInterval(123);
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 olvide definir el oyente en el descriptor de despliegue:
<webapp>
...
<listeners>
<listener-class>com.example.MyHttpSessionListener</listener-class>
</listeners>
</webapp>
Aún así, recomendaría crear diferentes archivos web.xml para cada aplicación y definir el tiempo de espera de la sesión allí:
<webapp>
...
<session-config>
<session-timeout>15</session-timeout> <!-- in minutes -->
</session-config>
</webapp>