로그아웃이 정상적으로 안됩니다.
- 작성자 :
- 공*철
- 작성일 :
- 2013-10-11 11:48:36
- 조회수 :
- 1,093
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
로그아웃이 정상적으로 안됩니다.
아래는 로그아웃 로직 중 일부입니다.
// 로그아웃 ============================
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 로 해서 받는다해도
파라미터 등을 넘길 방법이...?
세션은 이미 날렸으므로 그 값을 활용할 수는 없을듯하고...
기존 로그인되어 있던 화면인 관리자 화면인지? 사용자 화면인지?
뭘로 판단하나요?
그래서 위의 로직처럼 했었던 거거든요...
암튼...
관리자, 사용자 각각의 로그아웃 시
각각의 로그인 화면으로 보내려고 합니다.
물론 정상적인 로그아웃을 통해서...
어떻게 하면 될까요?
아래는 로그아웃 로직 중 일부입니다.
// 로그아웃 ============================
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 로 해서 받는다해도
파라미터 등을 넘길 방법이...?
세션은 이미 날렸으므로 그 값을 활용할 수는 없을듯하고...
기존 로그인되어 있던 화면인 관리자 화면인지? 사용자 화면인지?
뭘로 판단하나요?
그래서 위의 로직처럼 했었던 거거든요...
암튼...
관리자, 사용자 각각의 로그아웃 시
각각의 로그인 화면으로 보내려고 합니다.
물론 정상적인 로그아웃을 통해서...
어떻게 하면 될까요?
A
안녕하세요. 공현철님.
/j_spring_security_logout 요청을 처리하는 LogoutFilter의 내부 처리를 참조하셔서 다음과 같이 직접 호출하시면 되실 것 같습니다.
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
SecurityContextHolder.clearContext();
추가적으로 RemberMe 기능을 사용하신 경우 별도의 처리가 추가로 필요합니다.
(관련 내용은 Spring Security의 LogoutHandler 참조)
그럼, 즐거운 하루되십시오.
감사합니다.
/j_spring_security_logout 요청을 처리하는 LogoutFilter의 내부 처리를 참조하셔서 다음과 같이 직접 호출하시면 되실 것 같습니다.
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
SecurityContextHolder.clearContext();
추가적으로 RemberMe 기능을 사용하신 경우 별도의 처리가 추가로 필요합니다.
(관련 내용은 Spring Security의 LogoutHandler 참조)
그럼, 즐거운 하루되십시오.
감사합니다.