web-dev-qa-db-fra.com

La propriété d'application "server.servlet.session.timeout" ne fonctionne pas dans le projet Spring Boot

Selon la documentation de Spring Boot, le délai d'expiration de la session peut être configuré en définissant

server.servlet.session.timeout= 300s

dans application.properties fichier. Dans ce post et dans documentation Spring Boot il est également dit ainsi. Mais malheureusement, cela ne fonctionne pas pour moi.

Existe-t-il une autre configuration pour obtenir le résultat attendu?

9
Avijit Barua

Je poste une réponse car ce scénario est nouveau pour moi. Et je n'ai pas de solution appropriée pas à pas. Selon la suggestion de M. Deinum J'ai créé un web.xml fichier sous WEB-INF dossier. La structure du projet est comme

src
 |_ main
     |_ Java
     |_ resources
     |_ webapp
         |_ WEB-INF
              |_ web.xml

Et en web.xml J'ai configuré <session-timeout>...</session-timeout>

Ma web.xml est comme

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://Java.Sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">


    <session-config>
        <session-timeout>5</session-timeout>
    </session-config>

</web-app>

Et maintenant, le temps de session de ma webapp sur le serveur fonctionne selon ma configuration. Merci à M. Deinum

4
Avijit Barua

Vous pouvez utiliser l'approche 1:

server.servlet.session.timeout=30s
server.servlet.session.cookie.max-age=30s

Ça marche bien pour moi

2
vivekdubey

Une cause possible de ce problème peut être l'utilisation de @EnableRedisHttpSession. Comme expliqué dans ce réponse :

En utilisant @EnableRedisHttpSession, vous dites à Spring Boot que vous souhaitez prendre le contrôle complet de la configuration des sessions HTTP basées sur Redis. Par conséquent, sa configuration automatique est désactivée et server.servlet.session.timeout n'a aucun effet. Si vous souhaitez utiliser server.servlet.session.timeout, vous devez supprimer @EnableRedisHttpSession. Sinon, si vous souhaitez utiliser @EnableRedisHttpSession, vous devez utiliser l'attribut maxInactiveIntervalInSeconds pour configurer le délai d'expiration de la session.

J'espère que cela aide quelqu'un.

1
Nelly Mincheva

Utilisez HttpSessionListener.

server.servlet.session.timeout ne fonctionne que pour le conteneur intégré.

@Configuration
public class MyHttpSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        event.getSession().setMaxInactiveInterval(30);
    }
}
0
Ali

spring doc La dernière version de SpringBoot utilise les propriétés suivantes.

server.servlet.session.timeout=30m
0
kim se jung