2015-01-23 20 views
9

server.session-timeout dường như chỉ hoạt động đối với tomcat được nhúng.Thời gian chờ của phiên khởi động mùa xuân

Tôi đặt câu lệnh nhật ký để kiểm tra thời gian khoảng thời gian tối đa của phiên. Sau khi triển khai tập tin chiến tranh theo cách thủ công cho tomcat, tôi nhận ra rằng giá trị thời gian chờ của phiên mặc định (30 phút) vẫn đang được sử dụng.

Làm cách nào để đặt giá trị thời gian chờ của phiên có khởi động mùa xuân (không phải cho tomcat được nhúng, nhưng đối với máy chủ ứng dụng độc lập)?

+0

Trong khởi động mùa xuân, tôi thấy rằng "Mặc dù thời gian chờ phiên có thể được cấu hình dễ dàng bằng cách đặt thuộc tính server.sessiontimeout trong ứng dụng.properties cho giá trị mong muốn của chúng tôi tính bằng giây" . Điều này có đúng không? nếu bạn chỉ cần thêm thời gian chờ phiên trong tập tin thuộc tính nó sẽ làm việc? – Jesse

+0

có, quản lý phiên khởi động mùa xuân sẽ sử dụng org.apache.catalina.session.StandardManage khi bạn gói dự án khởi động mùa xuân vào một cuộc chiến và triển khai nó trong một thùng chứa bên ngoài. aka, nó sẽ sử dụng phiên bản web.xml chứa của nó hết hạn. – Tiina

+0

Gần đây tôi đã đọc về [chủ đề này] (https://stackoverflow.com/questions/32501541/what-is-the-default-session-timeout-and-how-to-configure-it-when-using-the- sprin) và trong phiên bản 1.5.7 nó được gọi là 'server.session.timeout'. – rocksteady

Trả lời

5

Khi bạn triển khai ứng dụng Khởi động mùa xuân vào một máy chủ độc lập, việc định cấu hình thời gian chờ của phiên được thực hiện theo cùng cách như trong bất kỳ triển khai chiến tranh nào khác.

Trong trường hợp của Tomcat, bạn có thể đặt thời gian chờ phiên bằng cách định cấu hình thuộc tính maxInactiveInterval trên phần tử trình quản lý trong server.xml hoặc sử dụng phần tử session-timeout trong tệp web.xml. Lưu ý rằng tùy chọn đầu tiên sẽ ảnh hưởng đến mọi ứng dụng được triển khai cho cá thể Tomcat.

+0

Điều gì xảy ra nếu ứng dụng không sử dụng web.xml nhưng sử dụng org.springframework.boot.web.servlet.FilterRegistrationBean trong @ SpringBootApplication/SpringBootServletInitializer? –

+0

Sau đó, bạn có thể định cấu hình nó trong server.xml như tôi đã nói ở trên –

+0

Hoặc thông qua API Servlet trực tiếp (https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#setMaxInactiveInterval(int)) trong https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html#sessionCreated(javax.servlet.http.HttpSessionEvent). Chỉ muốn kiểm tra xem Spring Web/Boot có hỗ trợ cho việc này hay không. Cảm ơn! –

1

Bạn đã khám phá, như tôi có, không có lệnh gọi trực tiếp trong API Servlet hoặc API Spring để đặt thời gian chờ của phiên. Sự cần thiết cho nó được thảo luận ở đây và ở đó, nhưng nó chưa được giải quyết.

Có một cách thức vòng quanh để làm những gì bạn muốn. Bạn có thể định cấu hình trình nghe phiên làm việc đặt thời gian chờ trên phiên. Tôi đã xem một bài viết có các ví dụ về mã tại: http://fruzenshtein.com/spring-java-configuration-session-timeout

Tôi hy vọng điều đó sẽ hữu ích.

+0

Vâng, tôi cũng thấy bài viết này. – led

14

Chỉ trong trường hợp ai đó tìm thấy này hữu ích:
nếu bạn đang sử dụng Xuân An, bạn có thể mở rộng các lớp SimpleUrlAuthenticationSuccessHandler và thiết lập thời gian chờ phiên trong xử lý xác thực thành công:

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

Trong ứng dụng của bạn .properties

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

Tôi đã thử nghiệm và đang hoạt động! Nó chỉ ra rằng tomcat mất tài sản trong vài phút

+0

Tính năng này có hoạt động với tomcat độc lập hay chỉ cho tomcat được nhúng không? – TolkienWASP

Các vấn đề liên quan