반응형

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());
    }

}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기