1. 세션 리스너(HttpSessionListener)
세션 리스너(HttpSessionListener)는 세션 생성, 세션 삭제 등의 이벤트가 발생했을 때, 로그나 알림 등을 줄 수 있는 세션 리스너(HttpSessionListener)이다. 세션 리스너(HttpSessionListener)는 세션 생성과 세션 삭제를 하고, 추가적으로 어떤 이벤트가 발생했을 때, 세션을 효율적으로 관리할 수 있도록 확인할 수 있게 해준다.
세션 리스너(HttpSessionListener) 예제
먼저, 세션 리스너(HttpSessionListener)의 인터페이스는 javax.servlet-api.jar 안에 http 안에 HttpSessionListener.class 안에 정의되어 있다.
HttpSessionListenner.class의 내부는 아래와 같다.
세션 생성을 할 때의 메소드인 sessionCreated와 세션 삭제할 때 메소드인 sessionDestroyed가 있다.
public interface HttpSessionListener extends EventListener {
public void sessionCreated(HttpSessionEvent se);
public void sessionDestroyed(HttpSessionEvent se);
}
sessionCreated()
세션이 생성될 때 호출되어 로직을 수행한다.
예를 들어, 로그인을 할 때 세션 생성 시 로그를 찍는 로직을 추가하여 넣을 수 있다.
sessionDestroyed()
세션이 삭제가 될 때마다 호출되어 로직을 수행한다.
예를 들어, 로그아웃할 때, 세션을 삭제하면 세션 삭제 시 로그를 찍는 로직을 추가하여 넣을 수 있다.
먼저, jar에서의 HttpSessionListener 인터페이스를 사용하기 위해 pom.xml을 통해 Maven Update를 한다.
1. pom.xml
아래의 dependency를 추가한다.
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
2. web.xml
web.xml에 <listener></listener> 태그 안에 <listener-class>HttpSessionListener</listener-class>를 등록한다.
<listener>
<listener-class>test.test.handler.HttpSessionListener</listener-class>
</listener>
3. HttpSessionListener.java
package com.common.handler;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.log4j.Logger;
public class HttpSessionListener implements HttpSessionListener {
private static Logger log = Logger.getLogger(HttpSessionListener.class);
private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
sessions.put(session.getId(), session);
log.debug("HttpSessionListener.sessionCreated - session.getId : "+session.getId());
log.debug("HttpSessionListener.sessionCreated - session : "+session);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
log.debug("HttpSessionListener.sessionDestroyed - session.getId : "+event.getSession().getId());
sessions.remove(event.getSession().getId());
}
}
최근댓글