157 lines
4.5 KiB
Java
157 lines
4.5 KiB
Java
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;
|
|
|
|
/**
|
|
* <pre>
|
|
* @Class Name : SessionConfig.java
|
|
*
|
|
* @Description : 멀티도메인에서의 로그인 처리를 위해 지방문화원에서 해당 세션에서 로그인처리 가능한 정보를 관리하는 클래스
|
|
*
|
|
*
|
|
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
|
|
*
|
|
* </pre>
|
|
*
|
|
* @ ------------ -------- ---------------------------
|
|
* @ 수정일 수정자 수정내용
|
|
* @ ------------ -------- ---------------------------
|
|
* @ 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<String, OAuthUniversalUser> loginSessions = new ConcurrentHashMap<>();
|
|
|
|
/* 세션별 회원가입 처리 가능한 정보 목록 */
|
|
private static final Map<String, OAuthUniversalUser> 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);
|
|
}
|
|
}
|
|
} |