session timeout 즉 세션유지 시간은 기본으로 30분으로 설정되어있다.
이걸 바꾸고 싶으면 몇가지 방법이 있다.
전통적인 방법이다 톰캣의 설정파일을 수정해주자
기본단위는 분(m)이다.
<session-config>
<session-timeout>60</session-timeout>
</session-config>
이러면 60분으로 설정된것이다.
springboot로 넘어오면 내장톰캣을 사용하게 된다. 그럼 web.xml이라는게 없다.
대신에 yml파일에 설정을 해줄수가 있다.
기본단위는 초(s) 이다.
server:
servlet:
session:
timeout: 86400
이렇게 하면 하루동안 유지되는것이다.
springboot version 1.x 에서는 server.session.timeout 을 사용하고
springboot version 2.x 에서는 위와 같이 server.servlet.session.timeout을 사용하면 된다.
springboot는 내장톰캣을 사용하도록 되어있지만. 외부에 별도의 WAS를 만들어서 셋팅할수도있다.
그러면 문제가
application.yml 에서 설정한 server셋팅이 안먹힌다.
그럼 web.xml을 직접 바꾸거나 Listener를 만들어서 처리해야된다.
web.xml을 이용하는 방법은 위에 기술해놨으니 sessionListener를 등록해서 처리하는방법을 알아보자
@WebListener
public class SessionListener implements HttpSessionListener {
private int sessionTime = 86400;
@Override
public void sessionCreated(HttpSessionEvent se) {
se.getSession().setMaxInactiveInterval(sessionTime);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {}
}
Servlet 3.0버전 이상인경우 @WebListener어노테이션을 사용하여 listener로 등록가능하다.
함수이름보면 대충 무슨역할인지 감이 올것이다.
setMaxInactiveInterval로 time을 설정하면 된다.
yml과 같이 초(s)가 기본단위이다.
@ServletComponentScan만 등록해주면 알아서 어노테이션 scan한다.
@ServletComponentScan
@SpringBootApplication
public class SessionListenerApplication {
public static void main(String[] args) {
Spring application.run(SessionListenerApplication.class, args);
}
}
config파일에 ServletListenerRegistrationBean을 @Bean으로 등록하는 방법도 있음
@Bean
public ServletListenerRegistrationBean<HttpSessionListener> sessionListener() {
return new ServletListenerRegistrationBean<HttpSessionListener>(new sessionListener());
}
저중에 편한방법을 사용하여 등록하면 listener가 잡힐것이다.
@WebListener말고 전통적인 web.xml을 사용하여 등록하는 방법은
<listener>
<listener-class>packagename.SessionListener</listener-class>
</listener>
이건 기억만 해두자