블로그 이미지
개발자의 조건은 어떤것도아닌 3일은 기본으로 날샐수있는 체력과 3일을 안씻어도 찝찝합을 못느끼는 것과 라면을 먹어도 탈없는 위입니다.
DefineJAVA

공지사항

최근에 받은 트랙백

글 보관함

calendar

      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      
크리에이티브 커먼즈 라이선스
Creative Commons License

기본적으로 HttpSessionListener를 구현(Implements)하여 세션이 생성 되는 시점과 세션이 사라지는 시점을 가지고 올 수 있다.

세션을 생성 되는 시점에 DB나 특정 Static 변수에 세션 정보를 저장 하고 세션이 종료될 때 그 세션 정보를 지워 줌으로써

해당 세션의 중복 로그인을 막을 수 있으며 현재 접속중이 접속자 정보를 가지고 올 수 있다.

package com.moainfo.http.session;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MoaSessionListener implements HttpSessionListener
{
 public void sessionCreated(HttpSessionEvent se)
 {
  HttpSession session = se.getSession();
  System.out.println("Create session : " + session.getId());
 }
 public void sessionDestroyed(HttpSessionEvent se)
 {
  HttpSession session = se.getSession();
  System.out.println("Close session : " + session.getId());
  
 }
}

저작자 표시 비영리 변경 금지

세션 강제 종료(강제 로그 아웃)

2011/05/05 13:46 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

Servlet 버젼이 올라 감으로 HttpSession에서 HttpSessionContext을 가져오는 메소드인 getSessionContext를 사용 못하게 되었다.
실제 사용을 하면 객체을 반환을 하기는 하지만 객체 안에 세션은 비워져 있다.

문서를 뒤져 보니 보안 관계상 사용을 못한다고 어쩌고 적혀 있기는 하는데.....그래도 관리자가 강제 로그아웃 시키거나 세션을 지워줘야 할 경우가 있을 것 같아서 고민끝에 편법을 하나 생각 해 냈다.(Jeus에서는 된다는 말도 있음)

HttpSessionContext 사용이 가능 하다면 HttpSessionContext .getSession(아이디)를 사용하여 세션 객체를 반환받고 HttpSession.invalidate() 메소드를 호출 하면된다.

HttpSessionContext 사용이 불가능 하다면 아래 소스와 같이 jsessionId값을 뒤쪽에 붙여 보내에 해당 세션으로 연결 시켜서 로그 아웃을 실행 하면 된다.


call.jsp

String jsessionId = "288B29804635D51357A52F6CCF25617B";
BufferedReader in = null;
String address = "http://me:8080/cms/logout.jsp;jsessionid="+ jsessionId;
try
{
 URL url = new URL(address);
 in = new BufferedReader(new InputStreamReader(url.openStream()));
 String line = in.readLine();
 in.close();
} catch (Exception e) {
 System.out.println("-.-;;");
}
in = null;

logout.jsp
System.out.println(session.getId());
 session.invalidate();

이 편법은 Session Hijacking이라는 다른 사람의 세션을 훔치는 방법을 응용한 방법이다.

약간의 문제가 있을 수도 있지만 우선은 이렇게 처리했다.

jsessionId값을 모르면 아무 소용이 없기 때문에 HttpSessionListener를 구현하여 세션이 생성되고 세션을 종료 되는 시점을 체크 하여 특정 저장 공간에 세션아이디 값과 아이피등 여러 정보를 저장 해 놓고 사용 하면된다.
저작자 표시 비영리 변경 금지
이전 1 다음