HttpSessionListener를 이용한 중복 로그인 방지

2024. 4. 30. 14:41·Java/Spring Boot

프로젝트를 간단하게 진행하다 보니 중복 로그인에 관한 내용을 신경 쓰지 않고 있었다.

 

Spring Security를 이용하면 수월하다고 하던데

프로젝트에 Spring Security를 적용하지 않아서 급한대로

HttpSessionListener를 이용하여 중복 로그인을 방지해 보았다.


✅ SessionConfig

@Slf4j
@WebListener
public class SessionConfig implements HttpSessionListener {

	private static final Map<String, HttpSession> sessions = new ConcurrentHashMap<>();
	
	//중복로그인 지우기
	public static boolean loginSessionidCheck(HttpSession session, String userId){
		HttpSession currentSession = sessions.putIfAbsent(userId, session);
		if (currentSession != null) {
            // 이미 로그인된 세션이 있다면 그 세션을 무효화
            if (!currentSession.getId().equals(session.getId())) {
                currentSession.invalidate();
                sessions.put(userId, session); // 새 세션을 저장
                return true;
            } else {
                // 동일 세션 로그인 시도 (정상 로그인)
                return false;
            }
        }
        return true;
	}
	
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		log.info("Session Event: {}", se);
	    sessions.put(se.getSession().getId(), se.getSession());
	}
	
	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		if(sessions.get(se.getSession().getId()) != null){
			sessions.get(se.getSession().getId()).invalidate();
			sessions.remove(se.getSession().getId());	
		}
	}
}

 

 

이렇게만 해두어도 정상적으로 작동하기는 하는데 기존에 로그인되어있던 PC에서는 아무런 알림도 없이

session이 없어져버려서 알림을 넣는 방법도 생각해 봐야겠다.

저작자표시 비영리 변경금지 (새창열림)

'Java > Spring Boot' 카테고리의 다른 글

Spring Security + JWT + Mybatis 인증/인가 구현  (0) 2024.10.08
Spring boot @RestController 유효성 검사  (0) 2024.09.22
Bean Validation  (1) 2024.02.26
Thymeleaf 스프링 통합과 폼  (0) 2024.02.15
Ajax를 통해 파일과 Json 업로드 후 Controller로 받기  (0) 2023.05.12
'Java/Spring Boot' 카테고리의 다른 글
  • Spring Security + JWT + Mybatis 인증/인가 구현
  • Spring boot @RestController 유효성 검사
  • Bean Validation
  • Thymeleaf 스프링 통합과 폼
요술공주밍키
요술공주밍키
조금씩이라도 꾸준히..
  • 요술공주밍키
    삽질의흔적
    요술공주밍키
  • 전체
    오늘
    어제
    • 분류 전체보기 (139)
      • Java (42)
        • Spring Boot (14)
        • Spring Boot 게시판 (14)
        • 공중화장실 찾기 (4)
        • 쇼핑몰 (8)
      • JavaScript (8)
        • NodeJS (2)
      • Python (5)
        • Django (4)
      • Server (10)
        • Docker (4)
        • K8S (0)
        • Jenkins (1)
      • 알고리즘 (24)
        • 프로그래머스 (19)
        • 백준 (5)
      • Etc (21)
        • 개발 팁 (1)
      • 일상 (27)
        • 독서 포스트 (25)
        • 회고록 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
요술공주밍키
HttpSessionListener를 이용한 중복 로그인 방지
상단으로

티스토리툴바