티스토리 뷰
서론
Web Application Server(이하 WAS)과 브라우저는 Http프로토콜을 사용하므로 연결이 지속적으로 유지가 되지 않는다. 이에 WAS는 사용자의 접속 정보를 유지하기 위해 Session이란것을 만들어 사용자의 요청헤더에 붙어 있는 쿠키값의 세션값과 비교해서 사용자를 구분하게 된다. 어플리케이션을 만들면서 해당 Session객체만을 사용해서 사용자를 구분할 수 있지만 요구 사항에 따라 이 Session객체와 관련된 수많은 자원들이 생성되어지게 될 수 있다. 예를 들어 A WAS, B WAS 총 두대의 WAS를 구동하는데 A WAS에서의 세션은 B WAS에서 인식하지 못하기 때문에 데이터베이스를 이용해서 A WAS에서 발급된 세션에 대한 정보를 테이블로 만들어 B WAS에서 사용되도록 할 수 있다. 이 경우 세션이 만료되는 시점에 해당 정보를 데이터베이스에서 지워야하는데 이 때 세션이 만료되는 시점의 이벤트를 감지하여 특정 로직을 구현 할 수 있다.
해당 구현을 위해서는 HttpSessionListener를 사용하여야 한다. 이번 포스팅에서는 HttpSessionListener를 스프링에서 사용하는 방법과 주의할 사항에 대해서 포스팅한다.
포스팅을 위해 사용한 스프링 버전은 4.2.5이다.
HttpSessionListener의 구현
HttpSessionListener를 구현하면 sessionCreated(HttpSessionEvent se):void, sessionDestroyed(HttpSessionEvent se): void 두개의 메소드를 구현하여야 한다. 메소드 이름에서 알 수 있듯이 세션이 만들어지고 없어질 때 이벤트가 발생하여 해당 이벤트를 처리 할 수 있는 메소드의 구현이다.
스프링 시큐리티을 사용하지 않는다면 HttpSessionListener를 구현하여야 하지만 스프링 시큐리티를 사용하는 경우라면 기본적으로 HttpSessionEventPublisher라는 구현클래스가 제공된다. 그래서 해당 클래스를 상속받아 사용하여도 되며 이번 포스팅에서는 HttpSessionEventPublisher 클래스를 상속하여 구현하도록 한다.
결과확인
위 테스트 로그인 폼을 사용을 해서 로그인을 하게 되면 session 정보가 데이터베이스에 아래와 같이 생성된다.
그리고 세션이 만료되면 만료되는 시점에 expire_flag를 Y로 업데이트를 시켜주면 해당 세션에 대한 로그인 정보를 사용 할 수 없게 되며 브라우저에서는 로그인 상태가 풀려버리게 구현을 할 수 있다. 우리가 만들었던 이벤트의 로그는 아래와 같이 나타나게 된다.
데이터베이스를 확인하게 되면
위와 같이 정상적으로 업데이트가 된 것을 확인 할 수 있다.
'Spring' 카테고리의 다른 글
Mybatis + Mysql Multiple Insert & update (0) | 2018.06.21 |
---|---|
Spring User Transactional Annotation (0) | 2017.03.25 |
Spring Security Custom EntryPoint (0) | 2016.12.28 |
JUnit 테스트 시 Spring 구동 및 Autowired하는 방법 (0) | 2016.11.15 |
Spring Bean Scope (0) | 2016.10.11 |