Comment définir le délai d’expiration de session de manière dynamic dans les applications Web Java?

Je dois donner à mon utilisateur une interface Web pour modifier le délai d’expiration de la session. Ainsi, différentes installations de l’application Web pourraient avoir des délais d’attente différents pour leurs sessions, mais leur web.xml ne peut pas être différent.

Existe-t-il un moyen de définir le délai d’expiration de la session de manière à pouvoir, par exemple, ServletContextListener.contextInitialized() pour lire l’intervalle configuré et le définir au démarrage de l’application?

Merci beaucoup.

Au lieu d’utiliser un ServletContextListener, utilisez un HttpSessionListener . Dans la méthode sessionCreated() , vous pouvez définir le délai d’expiration de la session par programmation.

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

Et n’oubliez pas de définir l’écouteur dans le descripteur de déploiement:

  ...  com.example.MyHttpSessionListener   

Cependant, je vous recommande de créer différents fichiers web.xml pour chaque application et de définir le délai d’expiration de la session:

  ...  15    

Existe-t-il un moyen de définir le délai de session par programmation

Il existe essentiellement trois façons de définir la valeur du délai d’expiration de la session:

  • en utilisant le session-timeout dans le fichier web.xml standard ~ ou ~
  • en l’absence de cet élément, en obtenant la valeur de session-timeout par défaut du serveur (et donc en la configurant au niveau du serveur) ~ ou ~
  • par programmation en utilisant la HttpSession. setMaxInactiveInterval(int seconds) HttpSession. setMaxInactiveInterval(int seconds) méthode dans votre Servlet ou JSP.

Mais notez que la dernière option définit la valeur du délai d’attente pour la session en cours, ce n’est pas un paramètre global.

Comme d’autres utilisateurs l’ont dit, vous pouvez changer de Session Listener. Mais vous pouvez le changer directement dans votre servlet, par exemple.

 getRequest().getSession().setMaxInactiveInterval(123);