Servlet 2.1 부터 HttpSession 의 getSessionContext() 메소드가 Deprecate 되었다.
저렇게 가져온 HttpSessionContext 에서 getSession(id) 해버리면 끝났던 것이, 이제는 직접 Map 을 만들던가 하여
getSession(id) 를 구현해 주어야 하는 불편함이 생겼다.
아래 코드 처럼, HttpSessionListener 를 implement 하여 Session 이 생성되거나 사라질 때 마다 Map 에 넣어서 관리를 해주도록 코딩을 해야 한다. 나중에 현재 접속중인 사용자와 같은 기능을 할때에도 아래를 응용하여 잘 쓰면 된다.
17 public class SessionListener implements HttpSessionListener{
18
19 public void init(ServletConfig config){
20 }
21
22 /**
23 * Adds sessions to the context scoped HashMap when they begin.
24 */
25 public void sessionCreated(HttpSessionEvent event){
26 HttpSession session = event.getSession();
27 ServletContext context = session.getServletContext();
28 Map activeUsers = (Map)context.getAttribute("activeUsers");
29
30 activeUsers.put(session.getId(), session);
31 }
32
33 /**
34 * Removes sessions from the context scoped HashMap when they expire
35 * or are invalidated.
36 */
37 public void sessionDestroyed(HttpSessionEvent event){
38 HttpSession session = event.getSession();
39 ServletContext context = session.getServletContext();
40 Map activeUsers = (Map)context.getAttribute("activeUsers");
41
42 activeUsers.remove(session.getId());
43 }
44 }
18
19 public void init(ServletConfig config){
20 }
21
22 /**
23 * Adds sessions to the context scoped HashMap when they begin.
24 */
25 public void sessionCreated(HttpSessionEvent event){
26 HttpSession session = event.getSession();
27 ServletContext context = session.getServletContext();
28 Map activeUsers = (Map)context.getAttribute("activeUsers");
29
30 activeUsers.put(session.getId(), session);
31 }
32
33 /**
34 * Removes sessions from the context scoped HashMap when they expire
35 * or are invalidated.
36 */
37 public void sessionDestroyed(HttpSessionEvent event){
38 HttpSession session = event.getSession();
39 ServletContext context = session.getServletContext();
40 Map activeUsers = (Map)context.getAttribute("activeUsers");
41
42 activeUsers.remove(session.getId());
43 }
44 }
직접 Java 코드에서 request.getSession(true); 했을 때, Listener 가 잘 Call 되지 않는다라는 글도 있었는데, 이점을 잘 테스트 하며 사용해보도록 한다.
그리고, Clustered 환경에서 혹시나 문제 소지가 있을 수도 있으니, 테스트 해가면서 사용한다.
반응형
'Software Development > JavaSE&EE' 카테고리의 다른 글
Springboot 로 SSO 구현하려면? (0) | 2023.02.18 |
---|---|
Session 카운트 하기 및 Session ID 모두 가져오기 등 (0) | 2010.02.19 |
[SJSWS (iPlanet)] Admin Server 패스워드 초기화 (0) | 2010.02.12 |
ClassLoader 의 ClassLoading 메커니즘 (0) | 2010.01.27 |
JNI 프로그래밍 시 DLL 이 중복 로드되는 경우 (0) | 2010.01.14 |