package com.takensoft.common.util; import jakarta.servlet.http.HttpSession; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author : takensoft * @since : 2025.03.21 * @modification * since | author | description * 2025.03.21 | takensoft | 최초 등록 * * 세션 로그인 방식의 유틸리티 */ @Component public class SessionUtil { private final Map sessionMap = new ConcurrentHashMap<>(); /** * @param mbrId - 사용자 Id * @param newSession - HTTP 세션 * * 기존 세션 있으면 강제 로그아웃 */ public synchronized void registerSession(String mbrId, HttpSession newSession) { HttpSession oldSession = sessionMap.get(mbrId); if (oldSession != null && oldSession != newSession) { oldSession.invalidate(); } sessionMap.put(mbrId, newSession); } /** * @param mbrId - 사용자 Id * * 로그아웃 */ public void removeSession(String mbrId) { HttpSession session = sessionMap.get(mbrId); if (session != null) { session.invalidate(); // 세션 무효화 } sessionMap.remove(mbrId); // 이후 맵에서 제거 } /** * * 전체 로그아웃 */ public void invalidateAllSessions() { for (HttpSession session : sessionMap.values()) { if (session != null) { session.invalidate(); } } sessionMap.clear(); // 전체 초기화 } }