HD

중복로그인 처리(feat.전자정부) 본문

JAVA

중복로그인 처리(feat.전자정부)

hunecenter 2022. 1. 25. 13:58
반응형

spring security로 처리가 가능하지만 전자정부에서 제공하는 방식으로 중복 로그인방지를 처리했다.

[HttpSessionBindingListener]

package project.com.util;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import org.springframework.stereotype.Component;

/**
 * @Class Name : EgovHttpSessionBindingListener.java
 * @Description : 중복 로그인 방지를 위해 사용자의 로그인 아이디와 세션을 제어하는 구현 클래스
 * @Modification Information
 *
 *    수정일         수정자         수정내용
 *    -------        -------     -------------------
 *    2014.09.30	표준프레임워크		최초생성
* @author YJ Kwon
 * @since 2014.09.30
 * @version 3.5
 */
@Component("listener")
public class EgovHttpSessionBindingListener implements HttpSessionBindingListener {

	public boolean isLogin = false;
	/**
	 * 사용자의 로그인 세션에 EgovHttpSessionBindingListener가 바인딩될 때 자동 호출되는 메소드로,
	 * 사용자 세션이 이미 존재하는지를 검사하여 하나의 어플리케이션 내에서 하나의 세션만 유지되도록 한다
	 * */
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		if (EgovMultiLoginPreventor.findByLoginId(event.getName())) {
			EgovMultiLoginPreventor.invalidateByLoginId(event.getName());			
		}
			EgovMultiLoginPreventor.loginUsers.put(event.getName(), event.getSession());
		
	}

	/**
	 * 
	 * 로그아웃 혹은 세션타임아웃 설정에 따라 사용자 세션으로부터 
	 * EgovHttpSessionBindingListener가 제거될 때 자동 호출되는 메소드로,
	 * 사용자의 로그인 아이디에 해당하는 세션을 ConcurrentHashMap에서 모두 제거한다
	 * */	
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		EgovMultiLoginPreventor.loginUsers.remove(event.getName());
	}
	
	public boolean isLogin(){
		return isLogin;
	}
}

- valueBound(HttpSessionBindingEvent e) : 세션이 생성될때 실행, 여기에 아래의 HashMap객체를 put

- valueUnbound(HttpSessionBindingEvent e) : 세션이 제거되거나 invalidate할때 실행, 여기에 아래의 HashMap 객체를 remove

[EgovMultiLoginPreventor]

package project.com.util;
import java.util.Enumeration;
import java.util.concurrent.ConcurrentHashMap;

import javax.servlet.http.HttpSession;

/**
 * @Class Name : EgovMultiLoginPreventor.java
 * @Description : 중복 로그인 방지를 위해 사용자의 로그인 아이디와 세션 아이디를 관리하는 구현 클래스
 * @Modification Information
 *
 *    수정일         수정자         수정내용
 *    -------        -------     -------------------
 *    2014.09.30	표준프레임워크		최초생성
* @author YJ Kwon
 * @since 2014.09.30
 * @version 3.5
 */
public class EgovMultiLoginPreventor {
	
	public static ConcurrentHashMap<String, HttpSession> loginUsers = new ConcurrentHashMap<String, HttpSession>();

	/**
	 * 사용자의 로그인 아이디로 생성된 세션이 있는지를 확인한다
	 * */
	public static boolean findByLoginId(String loginId) {
		return loginUsers.containsKey(loginId);
	}

	/**
	 * 사용자의 로그인 아이디로 이미 존재하는 세션을 무효화한다
	 * */
	public static void invalidateByLoginId(String loginId) {
		Enumeration<String> e = loginUsers.keys();
		
		while (e.hasMoreElements()) {
			String key = (String) e.nextElement();
			if (key.equals(loginId)) {
				loginUsers.get(key).invalidate();
			}
		}
	}
}

- static 으로 ConcurrentHashMap 객체가 존재하는데 이곳에 id값으로(고유값) 저장

- 해당 id값을 비교해서 동일한게 있으면 삭제 후 재생성

 

[사용방법 참고]

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:com:v3:cmm:multilogin 

 

egovframework:com:v3:cmm:multilogin [eGovFrame]

spring security 없이 중복 로그인을 방지하기 위한 기능이다. 로그인할 때 로그인 ID와 세션 ID를 Map에 저장하고, 로그아웃할 때 혹은 세션타임아웃 설정에 따라 두 정보를 Map에서 제거한다. 이미 로

www.egovframe.go.kr

 

반응형

'JAVA' 카테고리의 다른 글

Java @Scheduled Cron 표현식  (2) 2022.10.04
JAVA 접근장치, 운영체제, 브라우저 확인  (0) 2022.02.12
[구글 OTP] java  (4) 2021.09.14
URL로 첨부파일 다운로드  (0) 2021.09.01
이클립스 invalid LOC header 에러발생시  (0) 2021.05.26
Comments