티스토리 뷰

Spring

Spring HttpSessionListener

Jodu 2017. 3. 25. 10:02
반응형

서론

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 클래스를 상속하여 구현하도록 한다.



HttpSessionEvent는 생성되거나 파기되는 세션에 대한 정보를 가지고 있으며 해당 세션 정보는 getSession이라는 메소드를 통해서 가져온 것을 확인 할 수 있다.
여기서 하나 주의해야할 부분이 있는데 스프링을 사용함에도 @Autowired를 통한 CommunitySSOMapper 객체를 주입 받지 않는다. 여기서 @Autowired를 사용해서 객체를 주입 받게 되면 NullPointException이 발생 하게 된다. 그 이유는 정확하지는 않지만 HttpSessonListener는 web.xml 설정을 통해 톰캣의 이벤트 리스너에 등록이 되며 해당 클래스의 의존성 주입이 일어나기 전에 톰캣에 등록이 되기 때문인것같다. 
그래서 @Autowired를 통한 의존 주입이 아닌 ApplicationContext에 등록되있는 빈이름으로 직접 객체를 가져오게 하여야만 동작하게 된다. 

다음으로는 해당 구현체를 web.xml에 리스너에 등록을 해주어야 동작하게 된다. 



결과확인

위 테스트 로그인 폼을 사용을 해서 로그인을 하게 되면 session 정보가 데이터베이스에 아래와 같이 생성된다. 

그리고 세션이 만료되면 만료되는 시점에 expire_flag를 Y로 업데이트를 시켜주면 해당 세션에 대한 로그인 정보를 사용 할 수 없게 되며 브라우저에서는 로그인 상태가 풀려버리게 구현을 할 수 있다. 우리가 만들었던 이벤트의 로그는 아래와 같이 나타나게 된다.



데이터베이스를 확인하게 되면

위와 같이 정상적으로 업데이트가 된 것을 확인 할 수 있다.




반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함