JSP중~1

JSP 중복 로그인 (세션 바인딩 리스너)

중복 로그인을 회피하기 위해 HttpSessionBindingListener 인터페이스를 구현했습니다

Session Listener에서 두 가지를 비교해서 설명 해 드리면

HttpSessionListener는 세션의 생성과 세션이 해제 되는 이벤트에 맞게 리스너를 호출 할 수 있습니다.

HttpSessionBindingListener는 세션바인딩리스너 인터페이스를 구현한 세션에 바인딩 시키거나 언바인딩 되는 이벤트에 맞게 리스너를 호출 할 수 있습니다.

(세션의 속성을 추가 , 제거 를 뜻함)

 

1. 흐름

1.1

header.jsp 에서 로그인 시도 - ajax를 통해 서블릿으로 아이디와 비밀번호 및 아이디 저장 체크 유무 전송

1.2

FrontController.java 에서 url-pattern 및 분기를 통해 해당 Command로 이동

1.3

LoginCommand.java 에서 아이디와 비밀번호가 알맞을 경우, setSession을 통해 HashTable에 저장합니다.

세션바인딩 리스너는 setSession 메소드가 호출 했을 경우 valueBound가 실행 되며 ,

session.invalidate(); 와 같이 세션의 속성을 제거 했을 때 valueUnBound가 실행됩니다.

 

그리고 세션바인딩 리스너 인터페이스를 구현한 클래스는 싱글톤 패턴을 통해 효율적으로 관리됩니다.

이때 유저의 정보를 담고 있는 HashTable은 static으로 지정을 해 스태틱 메모리 영역에 저장을 합니다.

이는 공유하기 위해 요기다가 저장 하는 겁니당

1.4

이후 header.jsp에서 로그아웃을 하면 서블릿을 통해 해당 Command(Logout)로 이동하여 session.invalidate(); 를

실행합니다. 이 때 세션바인딩 리스너에서 valueUnBound가 실행되며 HashTable에서 해당하는 아이디가 제거됩니다.

1.5

중복아이디를 판단하는 메소드는 간단합니다. 세션 바인딩 리스너에서 isUsing 메소드를 통해서 현재 아이디가 HashTable

에 담겨 있다면 true를 반환하고, 없다면 false를 반환합니다.

LoginCommand에서 SessionListener.getInstance().isUsing(userId) 를 조건문으로 두어 중복로그인 인지 판별합

니다.

 

header.jsp


 

LoginCommand.java


 

SessionListener.java


 

 

'Spring' 카테고리의 다른 글

DI 설정 방법 - xml  (0) 2018.09.06
DI 설정 방법 - JAVA  (0) 2018.09.06
DI 설정 방법 - Java & xml 같이 사용  (0) 2018.09.06
Spring 한글 깨짐 현상  (0) 2018.07.17

+ Recent posts