메뉴 건너띄기
상단메뉴 바로가기
본문 바로가기

이 누리집은 대한민국 공식 전자정부 누리집입니다.

본문 영역

적용 지원, FAQ, Q&A 게시판을 통해 기술 문제 해결을 지원합니다.

묻고 답하기

로그아웃이 정상적으로 안됩니다.
  • 작성자

    공*철

  • 작성일

    2013-10-11 11:48:36

  • 조회수

    1,361

  • 구분

    실행환경

  • 진행상태

    완료

질문

로그아웃이 정상적으로 안됩니다.

아래는 로그아웃 로직 중 일부입니다.



// 로그아웃 ============================
try{
request.getSession().setAttribute("LoginVO", null);
} catch (Exception e) {
// 1. Security 연동
leaveaTrace.trace("fail.common.msg", this.getClass());
}
// /로그아웃 ============================



// 로그아웃 후 해당 로그인 페이지로 이동시킨다 ============================
return loginPageUrl;
// /로그아웃 후 해당 로그인 페이지로 이동시킨다 ============================



// return "redirect:/j_spring_security_logout";


위의 로직에서

return loginPageUrl;
을 주석처리하고
// return "redirect:/j_spring_security_logout";
을 주석해제하면
로그아웃 정상처리됩니다.

제가 원하는 것은
1개의 사이트로 관리자 모드, 일반 사용자 모드 모두 사용하는건데요...
때문에
로그인 화면도 각각 존재합니다.
관리자 로그인 화면
일반 사용자 로그인 화면

그래서
관리자 로그아웃 시 -> 관리자 로그인 화면으로...
사용자 로그아웃 시 -> 사용자 로그인 화면으로 ...
보내려고 합니다.

그래서 위의 로직처럼 했으나
각 로그인 화면으로는 이동하나
로그아웃이 정상적으로 안되는듯합니다.

익명 사용자는 로그인 화면을 제외하고는 모든 화면 접근 불가인데도 다 접근 가능하더군요...

그래서 원래대로

// return "redirect:/j_spring_security_logout";
이 부분 주석을 풀고 사용하니 로그아웃이 정상적으로 되었습니다.

근데...
context-security.xml
에서는 index.jsp 로 1개의 페이지로만 고정되어 있잖아요?
만일 이를
index.do 로 해서 받는다해도
파라미터 등을 넘길 방법이...?
세션은 이미 날렸으므로 그 값을 활용할 수는 없을듯하고...
기존 로그인되어 있던 화면인 관리자 화면인지? 사용자 화면인지?
뭘로 판단하나요?
그래서 위의 로직처럼 했었던 거거든요...

암튼...
관리자, 사용자 각각의 로그아웃 시
각각의 로그인 화면으로 보내려고 합니다.
물론 정상적인 로그아웃을 통해서...

어떻게 하면 될까요?

답변

안녕하세요. 공현철님.

/j_spring_security_logout 요청을 처리하는 LogoutFilter의 내부 처리를 참조하셔서 다음과 같이 직접 호출하시면 되실 것 같습니다.

HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}

SecurityContextHolder.clearContext();

추가적으로 RemberMe 기능을 사용하신 경우 별도의 처리가 추가로 필요합니다.
(관련 내용은 Spring Security의 LogoutHandler 참조)

그럼, 즐거운 하루되십시오.
감사합니다.

이 페이지의 구성

묻고 답하기