2015-01-23 20 views
9

server.session-timeout wydaje się działać tylko dla wbudowanego tomcat.Limit czasu sesji rozruchowej:

Dodałem instrukcję dziennika, aby sprawdzić maksymalny interwał sesji. Po ręcznym wdrożeniu pliku wojny do tomcat, zdałem sobie sprawę, że domyślna wartość limitu czasu sesji (30 minut) była nadal używana.

Jak ustawić wartość limitu czasu sesji przy użyciu rozruchu sprężynowego (nie dla osadzonego tomcat, ale dla autonomicznego serwera aplikacji)?

+0

W czasie wiosennego rozruchu stwierdziłem, że "Mimo że limit czasu sesji można łatwo skonfigurować, ustawiając właściwość server.sessiontimeout w application.properties na naszą pożądaną wartość w sekundach" . Czy to prawda? jeśli po prostu dodasz limit czasu sesji w pliku właściwości, będzie on działał? – Jesse

+0

Tak, zarządzanie sesją rozruchu wiosennego będzie używać org.apache.catalina.session.StandardManage podczas pakowania projektu rozruchu w czasie wojny i wdrażania go w zewnętrznym kontenerze. aka, używałby tego, który zawierałby czas sesji web.xml. – Tiina

+0

Niedawno przeczytałem o [ten temat] (https://stackoverflow.com/questions/32501541/what-is-the-default-session-timeout-andhow-to-configure-it-when-using-the- sprin), aw wersji 1.5.7 nazywane jest 'server.session.timeout'. – rocksteady

Odpowiedz

5

Po wdrożeniu aplikacji Spring Boot na serwerze autonomicznym konfigurowanie limitu czasu sesji odbywa się w taki sam sposób, jak w przypadku innych wdrożeń wojennych.

W przypadku Tomcat można ustawić limit czasu sesji, konfigurując atrybut maxInactiveInterval na elemencie menedżera w server.xml lub używając elementu session-timeout w pliku web.xml. Pamiętaj, że pierwsza opcja wpłynie na każdą aplikację wdrożoną w instancji Tomcat.

+0

Co zrobić, jeśli aplikacja nie korzysta z pliku web.xml, ale używa org.springframework.boot.web.servlet.FilterRegistrationBean w @ SpringBootApplication/SpringBootServletInitializer? –

+0

Następnie możesz skonfigurować go w pliku server.xml, tak jak powiedziałem powyżej: –

+0

lub bezpośrednio przez interfejsy API serwletów (https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#setMaxInactiveInterval))) w https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html#sessionCreated(javax.servlet.http.HttpSessionEvent). Chciałem tylko sprawdzić, czy Spring Web/Boot ma na to wsparcie. Dzięki! –

1

Odkryłeś, tak jak ja, że ​​nie ma bezpośredniego połączenia z Servlet API ani Spring API do ustawiania limitu czasu sesji. Potrzeba tego jest omawiana tu i tam, ale nie została jeszcze rozwiązana.

Istnieje sposób na zrobienie tego, co chcesz. Można skonfigurować program nasłuchujący sesję, który ustawia limit czasu sesji. Natknąłem się na artykuł z przykładami kodu: http://fruzenshtein.com/spring-java-configuration-session-timeout

Mam nadzieję, że to pomaga.

+0

Tak, widziałem również ten artykuł. – led

14

Tylko w przypadku, gdy ktoś znajdzie to przydatne:
jeśli używasz Wiosna Zabezpieczenia można rozszerzyć klasę SimpleUrlAuthenticationSuccessHandler i ustawić limit czasu sesji w przewodnika udanym uwierzytelnieniu

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

W aplikacji .properties

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

Przetestowałem to i działa! Okazuje się, że tomcat przejął nieruchomość w ciągu kilku minut.

+0

Czy to działa dla autonomicznego tomcat lub tylko dla wbudowanego tomcat? – TolkienWASP

Powiązane problemy