package nlib.cmm.session; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import egovframework.com.ext.oauth.service.OAuthUniversalUser; import nlib.util.StringUtil; /** *
 * @Class Name : SessionConfig.java
 * 
 * @Description : 멀티도메인에서의 로그인 처리를 위해 지방문화원에서 해당 세션에서 로그인처리 가능한 정보를 관리하는 클래스 
 * 
 * 
 * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
 *
 * 
* * @ ------------ -------- --------------------------- * @ 수정일 수정자 수정내용 * @ ------------ -------- --------------------------- * @ 2021. 8. 25. KNKIM 최초 생성 * * * @author 이씨플라자 * DIGITALSHIP KNKIM * @since 2021. 8. 25. * @version 1.0 * */ @WebListener public class SessionConfig implements HttpSessionListener { private static final Logger log = LoggerFactory.getLogger(SessionConfig.class); /* 사용자 정보를 구분하는 구분자 */ private static final String DELIMITER = "\t"; /* 세션별 로그인 처리 가능한 정보 목록 */ private static final Map loginSessions = new ConcurrentHashMap<>(); /* 세션별 회원가입 처리 가능한 정보 목록 */ private static final Map memberSessions = new ConcurrentHashMap<>(); @Override public void sessionCreated(HttpSessionEvent se) { log.debug("Session sessionCreated (O) : " + se.getSession().getId()); } @Override public void sessionDestroyed(HttpSessionEvent se) { String sessionId = se.getSession().getId(); log.debug("Session sessionDestroyed (X) : " + sessionId); if(loginSessions.get(sessionId) != null){ removeLoginInfo(sessionId); } if(memberSessions.get(sessionId) != null){ removeNewMemberInfo(sessionId); } } /** * 지방문화원 해당 세션에 로그인 처리 가능한 SNS유형 및 SNSID 정보를 저장한다. * * @param sessionId * @param snsType * @param snsId */ public static void setLoginInfo(String sessionId, OAuthUniversalUser oUser) { log.debug("setLoginInfo : " + sessionId + ", " + oUser.getSnsType() + ", " + oUser.getSnsId()); loginSessions.put(sessionId, oUser); } /** * 지방문화원 해당 세션에 로그인 처리 가능한 SNS 유형 및 SNS ID 정보를 리턴한다. * 리턴유형 문자열 배열 * [0] : snsType * [1] : snsId * * @param sessionId * @return */ public static OAuthUniversalUser popLoginInfo(String sessionId) { if(StringUtil.isEmpty(sessionId)) return null; OAuthUniversalUser ret = loginSessions.get(sessionId); removeLoginInfo(sessionId); return ret; } /** * 지방문화원 해당 세션에 로그인 처리 가능한 정보를 삭제한다. * (로그인 처리 완료 후 또는 세션 종료 시, 삭제) * * @param sessionId * @param snsType * @param snsId */ public static void removeLoginInfo(String sessionId) { if(StringUtil.isNotEmpty(sessionId)){ loginSessions.remove(sessionId); log.debug("removeLoginInfo > sessionId = " + sessionId); } } /** * 지방문화원 해당 세션에 회원가입 처리 가능한 SNS유형 및 SNS 프로파일 정보를 저장한다. * * @param sessionId * @param snsType * @param snsId */ public static void setNewMemberInfo(String sessionId, OAuthUniversalUser oUser) { log.debug("setLoginInfo : " + sessionId + ", " + oUser.getSnsId()); memberSessions.put(sessionId, oUser); } /** * 지방문화원 해당 세션에 회원가입 처리 가능한 SNS 유형 및 SNS 프로파일 정보를 리턴한다. * * @param sessionId * @return */ public static OAuthUniversalUser popNewMemberInfo(String sessionId) { if(StringUtil.isEmpty(sessionId)) return null; OAuthUniversalUser ret = memberSessions.get(sessionId); removeNewMemberInfo(sessionId); return ret; } /** * 지방문화원 해당 세션에 회원가입 처리 가능한 정보를 삭제한다. * (회원가입 처리 완료 후 또는 세션 종료 시, 삭제) * * @param sessionId * @param snsType * @param snsId */ public static void removeNewMemberInfo(String sessionId) { if(StringUtil.isNotEmpty(sessionId)){ memberSessions.remove(sessionId); log.debug("removeNewMemberInfo > sessionId = " + sessionId); } } }