0

ich es nicht schaffen, setzen Session-Timeout in meinem Jhipster WebApp (Frühjahr Boot + Spring Security + AngularJS)Wie Session-Timeout mit Federverschluß eingebettet tomcat

ich nur die einfachste Art und Weise tat einzustellen:

... 
/** 
* Configuration of web application with Servlet 3.0 APIs. 
*/ 
@Configuration 
public class WebConfigurer implements ServletContextInitializer, EmbeddedServletContainerCustomizer 
{ 
.... 
@Inject 
    private ServerProperties serverProperties; 
.... 
/** 
    * Set up Mime types. 
    */ 
    @Override 
    public void customize(ConfigurableEmbeddedServletContainer container) 
    { 
     MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT); 
     // IE issue, see https://github.com/jhipster/generator-jhipster/pull/711 
     mappings.add("html", "text/html;charset=utf-8"); 
     // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64 
     mappings.add("json", "text/html;charset=utf-8"); 
     container.setSessionTimeout(serverProperties.getSession().getTimeout(), TimeUnit.MINUTES); 
     log.info("SessionTimeout = {}", serverProperties.getSession().getTimeout()); 
     container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/login")); 
     container.setMimeMappings(mappings); 
    } 
... 

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) 
public class ServerProperties 
{ 
    private Session session = new Session(); 

    public static class Session 
    { 
     private int timeout = 6; 

     public int getTimeout() 
     { 
      return timeout; 
     } 

     public void setTimeout(int timeout) 
     { 
      this.timeout = timeout; 
     } 

    } 

    public Session getSession() 
    { 
     return session; 
    } 

    public void setSession(Session session) 
    { 
     this.session = session; 
    } 

} 

Application.yml

server: 
    port: 8080 
    session: 
     timeout: 1 

Protokolle darüber informiert, dass die Sitzung in 1 Minute Länge:

2016-07-28 16:17:03.103 INFO 6248 --- [ restartedMain] com.tess2i.config.WebConfigurer   : SessionTimeout = 1 

Nach dem Start der WebApp habe ich mich in WebApp eingeloggt, dann habe ich mehr als 1 Minute gewartet. Dann klicke ich irgendwo um den Server abzufragen. Alles funktionierte noch. Kein Sitzungsfehler/Umleitung.

Was muss noch getan werden?

+0

Ihre benutzerdefinierte Implementierung war nicht erforderlich - die Eigenschaft 'server.session.timeout' wird standardmäßig verwendet. Sind Sie sicher, dass Sie keine JWT-Authentifizierung verwenden? Oder hast du dich erinnern mich aktiviert? –

+0

Gemäß der Dokumentation sind die Einheiten dieser Eigenschaft in Sekunden angegeben. server.session.timeout = # Sitzungszeitlimit in Sekunden. http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html –

Antwort

1

Zuerst mussten Sie keine benutzerdefinierte Implementierung bereitstellen, die Einstellung server.session.timeout sollte durch Spring Boot out of the box unterstützt werden, siehe the official documentation für weitere Details.

Sind Timeouts und Redirects sicher, dass Sie keine remember-me- oder JWT-Authentifizierung oder andere Authentifizierungsmethoden verwenden, die nicht auf HTTP-Sitzungen und deren Ablauf basieren?

+0

Ja, Sie haben Recht, es gibt eine Erinnerung-mich-Authentifizierung in Jhispter. Aber ich habe gerade die Token-Gültigkeit wie folgt hinzugefügt: http.csrf(). Und(). AddFilterAfter (new CsrfCookieGeneratorFilter(), CsrfFilter.class) .exceptionHandling() .accessDeniedHandler (neuer CustomAccessDeniedHandler()). AuthenticationEntryPoint (authenticationEntryPoint) .und(). rememberMe() .rememberMeServices (rememberMeServices) .rememberMeParameter ("remember-me"). tokenValiditySeconds (10) .key (env.getProperty ("jhipster.security.rememberme.key")). und() . ..... aber nichts ändert sich –

+0

Nun, das ist ein ganz anderes Thema und hat nichts mit der aktuellen Frage zu tun - könnten Sie für dieses Szenario eine andere Frage aufwerfen und ein ausführlicheres Codebeispiel bereitstellen? Was diese Frage angeht, schlage ich vor, dass Sie die Authentifizierung "Ich erinnere mich" deaktivieren und überprüfen, ob das Sitzungszeitlimit funktioniert. –