2015-01-23 22 views
9

server.session-timeout scheint nur für Embedded Tomcat zu arbeiten.Spring Boot Sitzung Timeout

Ich legte eine Protokollanweisung, um die Sitzung maximale Intervallzeit zu überprüfen. Nach der manuellen Bereitstellung der WAR-Datei an tomcat wurde mir klar, dass der Standardwert für den Sitzungszeitlimit (30 min) noch verwendet wurde.

Wie kann ich den Sitzungszeitlimitwert mit Spring-Boot einstellen (nicht für eingebetteten Tomcat, sondern für einen eigenständigen Anwendungsserver)?

+0

In einer Feder Boot fand ich, dass „Auch wenn die Session-Timeout leicht durch Einstellen der server.sessiontimeout Eigenschaft in application.properties zu unserem gewünschten Wert in Sekunden konfiguriert werden kann“ . Ist das wahr? Wenn Sie nur Session-Timeout in der Eigenschaftendatei hinzufügen, würde es funktionieren? – Jesse

+0

Ja, die Springboot-Sitzungsverwaltung verwendet org.apache.catalina.session.StandardManage, wenn Sie das Spring-Boot-Projekt in einen Krieg packen und es in einem äußeren Container bereitstellen. aka, es würde die web.xml-Session-Verfallszeit von Contains verwenden. – Tiina

+0

Ich las kürzlich über [dieses Thema] (https://stackoverflow.com/questions/32501541/what-is-the-default-session-timeout-and-how-to-configure-it-when-use-the-the- sprin) und in Version 1.5.7 heißt es 'server.session.timeout'. – rocksteady

Antwort

5

Wenn Sie eine Spring Boot-App auf einem eigenständigen Server bereitstellen, wird das Konfigurieren des Sitzungszeitlimits auf die gleiche Weise wie bei jeder anderen War-Bereitstellung durchgeführt.

Im Fall von Tomcat Sie das Session-Timeout durch Konfigurieren das maxInactiveInterval Attribut auf dem Manager-Elemente in server.xml oder mit dem session-timeout Elemente in web.xml einstellen. Beachten Sie, dass sich die erste Option auf alle Apps auswirkt, die auf der Tomcat-Instanz bereitgestellt werden.

+0

Was passiert, wenn die Anwendung web.xml nicht verwendet, aber org.springframework.boot.web.servlet.FilterRegistrationBean in @ SpringBootApplication/SpringBootServletInitializer verwendet? –

+0

Dann können Sie es in server.xml wie oben erwähnt konfigurieren –

+0

Oder über Servlet-APIs direkt (https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#setMaxInactiveInterval())) in https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html#sessionCreated(javax.servlet.http.HttpSessionEvent). Ich wollte nur überprüfen, ob Spring Web/Boot dies unterstützt. Vielen Dank! –

1

Sie haben festgestellt, dass es keinen direkten Aufruf in der Servlet-API oder den Spring-APIs zum Festlegen des Sitzungszeitlimits gibt. Die Notwendigkeit dafür wird hier und da diskutiert, aber es wurde noch nicht angesprochen.

Es gibt eine runde Sache, um zu tun, was Sie wollen. Sie können einen Sitzungslistener konfigurieren, der das Zeitlimit für die Sitzung festlegt. Ich stieß auf einen Artikel mit Codebeispielen unter: http://fruzenshtein.com/spring-java-configuration-session-timeout

Ich hoffe, dass das hilft.

+0

Ja, ich habe diesen Artikel auch gesehen. – led

14

Nur falls jemand findet dies nützlich:
wenn Sie Spring Security verwenden können Sie die SimpleUrlAuthenticationSuccessHandler Klasse erweitern und das Session-Timeout in dem Authentifizierungs-Erfolg Handler gesetzt:

public class NoRedirectSavedRequestAwareAuthenticationSuccessHandler 
     extends SimpleUrlAuthenticationSuccessHandler { 

    public final Integer SESSION_TIMEOUT_IN_SECONDS = 60 * 30; 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, 
             HttpServletResponse response, 
             Authentication authentication) 
             throws ServletException, IOException { 

     request.getSession().setMaxInactiveInterval(SESSION_TIMEOUT_IN_SECONDS); 

     // ... 
    } 


    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
      .anyRequest() 
      .authenticated() 
      .and() 
      .formLogin() 
      .loginProcessingUrl("/login") 
      .successHandler(new NoRedirectSavedRequestAwareAuthenticationSuccessHandler()) 
      .failureHandler(new SimpleUrlAuthenticationFailureHandler()) 
      .and().httpBasic(); 
    } 

} 
0

bei Ihrer Bewerbung .properties

#session timeout (in secs for spring, in minutes for tomcat server/container) 
server.session.timeout=1 

Ich habe es getestet und funktioniert! Es stellt sich heraus, dass tomcat die Eigenschaft in Minuten

+0

Funktioniert dies für einen eigenständigen Tomcat oder nur für einen eingebetteten Tomcat? – TolkienWASP