728x90
WebListener
@WebListener annotation을 사용하면 해당 클래스는 Listener가 된다.
- Listener : 특정 이벤트가 발생하기를 기다리다 이벤트 발생 시 실행되는 컴포넌트를 뜻한다.
- 클래스를 Listener로 등록하게 되면 서버가 종료될 때 까지 백그라운드 상태에서 동작하는 데몬(deamon)이 되기 때문에 간단한 값을 공유할 수 있다.
- 추가로 ServletContextListener인터페이스를 상속받으면 서버가 실행/종료 될 때 특정 동작을 수행할 수 있다.
HttpSessionLIstener
HttpSessionListener인터페이스를 상속받으면 sessionCreated()와 sessionDestroyed() 메서드를 Override할 수 있다.
- sessionCreated() : 세션이 생성될 때 실행됨.
- sessionDestroyed() : 세션이 소멸될 때 실행됨. (시간이 만료되어 자연 소멸되는 경우 이벤트가 발생하지 않음)
중복 로그인 방지
@WebListener
public class SessionConfig implements HttpSessionListener{
private static final Map<String, HttpSession> sessions = new ConcurrentHashMap<>();
//중복로그인 지우기
public synchronized static boolean getSessionidCheck(String userId, HttpSession hs, boolean loginCheck){
// 중복 체크
if(session.get(userId) != null) {
if(loginCheck) {
// loginCheck가 true면 confirm을 받고온 것이기 때문에 세션 제거
removeSessionForDoubleLogin(result);
}else {
return false;
}
}
sessions.put(userId, hs);
return true;
}
private static void removeSessionForDoubleLogin(String userId){
if(userId != null && userId.length() > 0){
sessions.get(userId).invalidate();
sessions.remove(userId);
}
}
@Override
public void sessionCreated(HttpSessionEvent hse) { // 세션이 생성될 때 동작
//System.out.println(hse);
//sessions.put(hse.getSession().getId(), hse.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent hse) { // 세션이 소멸될 때 동작
//if(sessions.get(hse.getSession().getId()) != null){
// sessions.get(hse.getSession().getId()).invalidate();
// sessions.remove(hse.getSession().getId());
}
}
}
sessionCreated, Destroyed는 자연소멸 (시간만료)의 경우에는 동작하지 않기 때문에 사용 권장하지 않는다.
728x90
'🍃SpringFrameworks > SpringMVC' 카테고리의 다른 글
[SpringMVC] 주요 @Annotation들 (2) | 2023.08.19 |
---|---|
[SpringMVC] REST API & Ajax (0) | 2023.08.19 |
[SpringMVC] MyBatis (0) | 2023.08.19 |
[SpringMVC] TDD (0) | 2023.08.19 |
[SpringMVC] AOP (Aspect Oriented Programming) (0) | 2023.08.19 |