Spring security logout handler / 스프링 시큐리티 로그아웃 핸들러

북마크 추가

안녕하세요

Spring security에서 로그아웃 처리시 별도 후 처리를 위한 handler를 추가하는 방법입니다.

기존에는 기본으로 제공되는 /j_spring_security_logout 를 사용해서 로그아웃 처리를 했으나 이번에는 별도 handler를 추가 하도록 하겠습니다.


1. CustomLogoutSuccessHandler.java

import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; 

public class CustomLogoutSuccessHandler implements LogoutSuccessHandler{	

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
                             Authentication authentication) throws IOException, ServletException {
        if (authentication != null && authentication.getDetails() != null) {
            try {
                 request.getSession().invalidate();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } 
        response.setStatus(HttpServletResponse.SC_OK);
        response.sendRedirect("/");
    }
}


LogoutSuccessHandler 상속받아 onLogoutSuccess 인터페이스를 구현해 줍니다.

로그아웃 요청시 위 handler를 타게 되며 세션을 날리고 메인페이지로 리다이렉트 합니다.

try구문안에 로그아웃시 필요한 후 처리 로직을 넣으면 됩니다.


2. security-context.xml

<http></http> 사이에 로그아웃 설정을 넣어줍니다.

<logout logout-url="/logout"
	  success-handler-ref="logoutSuccessHandler"
	  invalidate-session="false"/>

logout-url을 사용하여  /j_spring_security_logout 대신 /logout을 호출하게 합니다.

success-handler-ref 는 bean id로 </http> 바깥에 추가합니다.

<beans:bean id="logoutSuccessHandler" class="패키지 경로.CustomLogoutSuccessHandler"></beans:bean>

* namespace 설정에 따라 logout 앞에 security:를 붙여야 할수도 있고 beans:를 사용하지 않을수도 있습니다.


invalidate-session="false" 로 설정하면 로그아웃 핸들러까지 새션이 살아서 오고 "true"로 설정하는 경우 세션이 무효화 된 상태로 옵니다.

저는 로그아웃 처리시 session.getAttribute()를 사용하여 값을 꺼내기 위에 false로 설정하였습니다.


위와같이 설정후 /logout을 호출하면 핸들러를 통해 로그아웃 처리가 됩니다.



AD
관리자
2019-03-20 14:48
SHARE