package com.udapsoft.waf.system.session; import java.util.Hashtable; import javax.servlet.http.HttpSession; import kr.co.hsnc.common.util.ValueObject; /** * 로그인한 사용자의 HttpSession을 관리한다. * this.KEY 변수를 KEY로 사용자를 구분한다. * * @author Sunyoup * */ public class SignOnSession { private static String KEY = "USER_ID"; private static Object session = null; /** * HttpSession을 보관하는 Hanshtable * key : USER_ID(String) * value : UserInfo(ValueObject) */ private Hashtable session_hash = null; /** * USER_ID 를 보관하는 Hashtable * key : SessionID(String) * value : USER_ID(String) */ private Hashtable user_id_hash = null; /** * 생성자 - private * Singleton Patterns 사용 */ private SignOnSession() { this.session_hash = new Hashtable(); this.user_id_hash = new Hashtable(); } /** * SignOnSession에 Instance를 리턴한다. * Singleton Patterns 사용 * @return */ public synchronized static SignOnSession getInstance() { if( session == null ) { session = new SignOnSession(); } return (SignOnSession)session; } /** * KEY name을 리턴 * @return */ public static String getKeyName() { return KEY; } /** * 사용자 정보를 KEY로 하는 세션이 존재 여부를 리턴 * @param user * @return boolean */ public boolean isExistSession(ValueObject user) { return this.session_hash.containsKey(user.get(KEY)); } /** * 사용자 정보를 KEY로 하는 세션이 존재 여부를 리턴 * @param user * @return boolean */ public boolean isExistUserId(String sessionId) { return this.user_id_hash.containsKey(sessionId); } /** * 해당 사용자의 HttpSession을 리턴한다. * @param user * @return */ public HttpSession getSession(ValueObject user) { if( isExistSession(user) ) { return (HttpSession)this.session_hash.get(user.get(KEY)); } return null; } /** * SessionId에 해당하는 USER_ID를 리턴 * @param sessionId * @return */ public String getUserId(String sessionId) { if( isExistUserId(sessionId) ) { return (String)this.user_id_hash.get(sessionId); } return null; } /** * 사용자의 HttpSession 을 Add한다. * @param user * @param session */ public void addSession(ValueObject user, HttpSession session) { if( !isExistSession(user) ) { this.session_hash.put(user.get(KEY), session); } if( !isExistUserId(session.getId()) ) { this.user_id_hash.put(session.getId(), user.get(KEY)); } } /** * 사용자의 HttpSession Remove 한다. * @param user */ public void delSession(ValueObject user, String sessionId) { if( user != null ) { this.session_hash.remove(user.get(KEY)); this.user_id_hash.remove(sessionId); } } }