Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- AES
- Was
- 개발자도구
- TailMe
- JEUS
- FCM
- 접근장치
- URLRewirte
- 물리적주소
- programmers
- WebtoB
- User-Agent
- ua-parser
- 알고리즘
- eGov
- Firebase
- Login
- Tomcat
- @Scheduled
- WINDOW11
- web server
- scheduled
- Java
- 브라우저
- Oracle
- db
- window10
- mysql
- 암호화
- dbms
Archives
- Today
- Total
HD
중복로그인 처리(feat.전자정부) 본문
반응형
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
반응형
'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