HttpSessionListener (Session Timeout 설정)

-·2023년 12월 19일

Session Timeout 설정하기

session timeout 즉 세션유지 시간은 기본으로 30분으로 설정되어있다.

이걸 바꾸고 싶으면 몇가지 방법이 있다.

web.xml

전통적인 방법이다 톰캣의 설정파일을 수정해주자

기본단위는 분(m)이다.

<session-config>    
    <session-timeout>60</session-timeout>
</session-config>

이러면 60분으로 설정된것이다.

application.yml

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을 사용하면 된다.

내장 tomcat을 사용하지 않을경우

sessionListener

springboot는 내장톰캣을 사용하도록 되어있지만. 외부에 별도의 WAS를 만들어서 셋팅할수도있다.

그러면 문제가

application.yml 에서 설정한 server셋팅이 안먹힌다.

그럼 web.xml을 직접 바꾸거나 Listener를 만들어서 처리해야된다.

web.xml을 이용하는 방법은 위에 기술해놨으니 sessionListener를 등록해서 처리하는방법을 알아보자

SessionListener.java

@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

@ServletComponentScan만 등록해주면 알아서 어노테이션 scan한다.

@ServletComponentScan
@SpringBootApplication
public class SessionListenerApplication {
	public static void main(String[] args) {
		Spring application.run(SessionListenerApplication.class, args);
	}
}

WebConfig.java

config파일에 ServletListenerRegistrationBean을 @Bean으로 등록하는 방법도 있음

@Bean
public ServletListenerRegistrationBean<HttpSessionListener> sessionListener() {
    return new ServletListenerRegistrationBean<HttpSessionListener>(new sessionListener());
}

저중에 편한방법을 사용하여 등록하면 listener가 잡힐것이다.

web.xml

@WebListener말고 전통적인 web.xml을 사용하여 등록하는 방법은

<listener>
	<listener-class>packagename.SessionListener</listener-class>
</listener>

이건 기억만 해두자

profile
거북이는 오늘도 걷는다

0개의 댓글