2015-01-23 4 views
9

server.session-timeout은 임베디드 tomcat에서만 작동하는 것으로 보입니다.스프링 부트 세션 시간 초과

세션 최대 간격 시간을 확인하기 위해 log 문을 넣었습니다. war 파일에 war 파일을 수동으로 배포 한 후에도 기본 세션 시간 초과 값 (30 분)이 여전히 사용되고 있음을 알게되었습니다.

spring-boot (포함 된 톰캣이 아니라 독립형 응용 프로그램 서버)에서 세션 시간 초과 값을 어떻게 설정할 수 있습니까?

+0

봄 부팅에서 "application.properties의 server.sessiontimeout 속성 속성을 초 단위로 원하는 값으로 설정하여 세션 시간 초과를 쉽게 구성 할 수 있지만" . 사실입니까? 만약 당신이 속성 파일에 세션 타임 아웃을 추가했다면 작동할까요? – Jesse

+0

예, 스프링 부트 세션 관리는 스프링 부트 프로젝트를 전쟁에 패키지로 묶고 외부 컨테이너에 배포 할 때 org.apache.catalina.session.StandardManage를 사용합니다. 예를 들어, contains의 web.xml 세션 만료 시간을 사용합니다. – Tiina

+0

나는 최근 [이 주제]에 대해 읽었습니다. (https://stackoverflow.com/questions/32501541/what-is-the-default-session-timeout-and-how-to-configure-it-when-using-the- sprin) 버전 1.5.7에서는'server.session.timeout'이라고 불린다. – rocksteady

답변

5

독립 실행 형 서버에 Spring Boot 응용 프로그램을 배포 할 때 세션 시간 초과 구성은 다른 war 배포와 같은 방식으로 이루어집니다.

Tomcat의 경우 의 관리자 요소에 maxInactiveInterval 특성을 구성하거나 web.xml의 session-timeout 요소를 사용하여 세션 시간 초과를 설정할 수 있습니다. 첫 번째 옵션은 Tomcat 인스턴스에 배포 된 모든 앱에 영향을줍니다.

+0

응용 프로그램이 web.xml을 사용하지 않지만 org.springframework.boot.web.servlet.FilterRegistrationBean을 @ SpringBootApplication/SpringBootServletInitializer에 사용하면 어떻게 될까요? –

+0

그런 다음 위에서 설명한대로 server.xml에 구성 할 수 있습니다. –

+0

또는 직접 Servlet API를 통해 (https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#setMaxInactiveInterval(int))). https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html#sessionCreated(javax.servlet.http.HttpSessionEvent). Spring Web/Boot가이를 지원하는지 확인하고 싶었습니다. 감사! –

1

내가 알기 론 Servlet API에는 직접 호출이 없으며 세션 시간 초과 설정을위한 Spring API도 없습니다. 그것에 대한 필요성이 여기 저기에 논의되어 있지만 아직 다루어지지 않았습니다.

원하는대로 할 수있는 방법이 있습니다. 세션의 시간 제한을 설정하는 세션 수신기를 구성 할 수 있습니다. 다음에서 코드 예제가있는 기사를 보았습니다. http://fruzenshtein.com/spring-java-configuration-session-timeout

도움이 되었기를 바랍니다.

+0

예,이 기사도 보았습니다. – led

14

그냥 경우에 누군가가 발견이 유용한 : 당신이 봄 보안을 사용하는 경우
당신이 SimpleUrlAuthenticationSuccessHandler 클래스를 확장하고 인증 성공 처리기에서 세션 시간 제한을 설정할 수 있습니다 응용 프로그램에서

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

을 .properties

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

테스트를 마쳤습니다! Tomcat이 속성을 분만에 걸리는 것으로 밝혀졌습니다.

+0

이 기능은 독립 실행 형 tomcat 또는 포함 된 tomcat에서만 작동합니까? – TolkienWASP