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