From 65279fe7d413caed671fbd352874e77770d38205 Mon Sep 17 00:00:00 2001 From: daekuk Date: Fri, 26 Dec 2025 13:22:03 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=B8=EC=85=98=20=ED=83=80=EC=9E=84?= =?UTF-8?q?=EC=95=84=EC=9B=83=20=EC=8B=9C=20=EC=84=B8=EC=85=98=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A0=9C=EA=B1=B0=ED=95=98=EB=8A=94=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/SessionDestructionListener.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java diff --git a/src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java b/src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java new file mode 100644 index 0000000..1fb4d46 --- /dev/null +++ b/src/main/java/com/eactive/eai/rms/common/login/SessionDestructionListener.java @@ -0,0 +1,46 @@ +package com.eactive.eai.rms.common.login; + +import javax.servlet.annotation.WebListener; +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; + +import org.apache.log4j.Logger; + +@WebListener +public class SessionDestructionListener implements HttpSessionListener { + + private static final Logger logger = Logger.getLogger(SessionDestructionListener.class); + + @Override + public void sessionCreated(HttpSessionEvent se) { + + } + + /** + * 세션 타임아웃 등으로 소멸 시 세션정보 삭제 + */ + @Override + public void sessionDestroyed(HttpSessionEvent se) { + + try { + HttpSession session = se.getSession(); + + String userId = (String) session.getAttribute("userId"); + + // 로그인 한 사용자의 세션정보 정리 + if (userId != null) { + if (logger.isDebugEnabled()) { + logger.debug("[SessionListener] 세션만료 감지. 사용자 제거: " + userId); + } + + SessionManager.removeUserSession(userId); + } + + } catch (Exception e) { + + + logger.error("[SessionListener] 세션 정리 중 오류 발생", e); + } + } +}