web-dev-qa-db-fra.com

Délai d'expiration de session de l'application Spring Boot

J'ai créé une application SpringBoot MVC/Security 1.2.2.RELEASE et mon application.properties contient des paramètres de serveur tels que

#Tomcat port and contextPath details
server.port=8080
server.contextPath=/test
#server.session-timeout=120
server.sessionTimeout=120

Les états documentation

server.session-timeout= # session timeout in seconds

mais ServerProperties.Java utilise sessionTimeout;

Si vous regardez le code application.properties que j'ai posé, j'ai essayé les deux indépendamment et ensemble, mais je ne suis pas dépassé après 2 minutes, je n'ai pas d'autre code écrit explicitement pour effectuer un traitement de session.

Quelqu'un at-il rencontré ce problème? Qu'est-ce qui me manque ou que je fais mal?

12
victor

Je ne sais pas pour quelque raison que ce soit la mise 

server.session.timeout=120 

n'a pas fonctionné pour moi cependant, lorsque j'ai défini le délai d'expiration de la session et l'âge maximal du cookie, comme ci-dessous:

server.session.cookie.max-age=120
server.session.timeout=120 

ça marche parfaitement

9
Manish Kothari

Je ne suis pas sûr de savoir à quoi sert server.session.timeout, car lorsque je le définit sur un nombre spécifique et que je surveille la création de la session, l'expiration de la session n'est pas modifiée.

J'utilise une session printanière et une intégration redis. Dans mon cas, je dois définir la valeur maxInactiveIntervalInSeconds sur 120 (secondes). Cette opération peut être effectuée via redisHttpSessionConfiguration.

Et puis, si je vais sur Redis pour rechercher la session, je peux voir que son expiration a été modifiée en 120 secondes et que le délai d'expiration de la session fonctionne.

Une de mes suggestions serait d'essayer de savoir si vous pouvez configurer le maxInactiveIntervalInSeconds (ou similaire) de la session (par programme) ou dans le fichier de propriétés et surveiller les modifications de la session.

2
Phoebe Li

(Ceci s'applique à Spring 1.5.x au moment d'écrire ces lignes)

Notez que si vous utilisez Redis session @EnableRedisHttpSession (comme dans le cas de l'autre commentaire --Phoebe Li ), la propriété d'application server.session ne sera pas appliquée. Vous devrez le définir manuellement avec le code suivant:

@EnableRedisHttpSession
public class HttpSessionConfig {
    @Bean
    public RedisOperationsSessionRepository sessionRepository(RedisConnectionFactory factory) {
        RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(factory);

        //Set the TTL of redis' key, which in turn will expire session when TTL is reached
        sessionRepository.setDefaultMaxInactiveInterval(15); //e.g. 15 seconds

        return sessionRepository;
    }I
}
1
EwyynTomato

Dans application.yml de mon application Spring Boot 2

# A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits
server:
  servlet:
    session:
      cookie:
        max-age: -1
      timeout: -1

Avec ces paramètres, JSESSIONID heure d'expiration du cookie est définie sur "Lorsque la session de navigation se termine".

0
naXa

Vous pouvez essayer d'ajouter ces deux instructions.

server.session.cookie.max-age=120
server.session.timeout=120

Vous trouverez un exemple complet sur mon blog ici: http://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-Tomcat-session-timeout.html

0