2013년 6월 25일 화요일

spring security logouthandler source

spring security logouthandler는 기본적으로 log-ut-url을 설정해서 사용하지만. 특별한 경우 예를들면 서브도메인이 존재하는 경우 로그아웃을 눌렀을 경우 서브도메인에 따라 로그아웃 후에 경로를 달리해야할 경우가 있다. 1)기본적인 logout 방법 url을 지정해서 사용하는 경우(하나의 url로만 지정된다) <logout invalidate-session="true" logout-success-url="/" /> 2)로그아웃 경로를 달리해야할경우 <logout invalidate-session="true" success-handler-ref="logoutSuccessHandler" /> <beans:bean id="logoutSuccessHandler" class="com.xxx.xxx.security.LogoutSuccessHandler" />

아래는 class SOURCE =====SOURCE

import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
import org.springframework.stereotype.Component;

@Component
public class LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(javax.servlet.http.HttpServletRequest request,
                                javax.servlet.http.HttpServletResponse response,
                                Authentication authentication)
            throws java.io.IOException, javax.servlet.ServletException {

       

                if(request.getParameter("SOMEVALUE")){
response.sendRedirect("/url A"); //이부분을 분기처리(if)해서 달리해주면 된다.
}else{
response.sendRedirect("/url B");
}

    }
}

//HTML
<a href="<c:url value="j_spring_security_logout/?logoutURL=SOMEVALUE" />" > Logout</a>






혹시나 하는 맘에 분기처리하는 방법은
request.getParameter로 로그아웃화면에서 특정한 parameter를 날려도 좋고
혹은 request.getServerName() 등으로 받아서 처리해도 좋다. 
사용방법은 본인의 생각에 따라 달리하면 될듯하다.

가장 간단한 방법은
이런식으로 넘겨주고 request.getParameter로 받아서 if로 처리하는 방법이 가장 간단하다. 

더 좋은 방법이 있다면 알려주면 감사합니다.~

댓글 없음:

댓글 쓰기