로그아웃 처리
로그아웃 처리 방법
Spring Security 공식 문서에 의하면, Logout을 위한 엔드포인트, 즉 Controller에 Logout API를 작성하는 것보다는 LogoutFilter를 사용하는 것을 권장한다.
SecurityContextLogoutHandler 라는 클래스에서는 HttpSession을 invalidate해주거나, SecurityContext에 저장되어 있는 Authentication을 제거해주기 때문에 안전한 로그아웃 위해 사용하는 것을 권장한다.
Logout API를 따로 작성하면 이 핸들러를 직접 생성하거나 주입받아 아래와 같이 코드를 작성해주어야 하므로 번거로워진다.
new SecurityContextLogoutHandler().doLogout(request, response, authentication);
LogoutFilter 사용 방법
SecurityConfiguration의 SecurityFilterChain에서 간단하게 로그아웃 처리하는 코드를 작성할 수 있다.
logoutRequestMatcher
: 어떤 URL일 때 LogoutFilter가 실행될 지 지정할 수 있다.addLogoutHandler
: Logout시에 어떤 동작을 할 것인지에 대해 클래스 형태 또는 람다 형태로 정의할 수 있다. 아래 예시에서는 간단하게 람다를 사용해 쿠키를 제거해주었다.logoutSuccessHandler
: 로그아웃 필터에서 모든 작업이 오류 없이 수행되었을 때 어떤 동작을 할 것인지에 대해 클래스 형태 또는 람다 형태로 정의할 수 있다. 아래 예시에서는 간단하게 response status를 OK로 변경해주었다.이외에도
deleteCookies
,clearAuthentication
등 로그아웃 요구사항에 맞게 다양하게 커스텀하여 활용할 수 있다.
LogoutFilter
LogoutFilter를 활성화하면 기본적으로 LogoutSuccessHandler 하나와 LogoutHandler 두 개가 등록된다.
커스텀 LogoutSuccessHandler가 등록되면, 해당 LogoutSuccessHandler만 동작하게 된다.
커스텀 LogoutHandler가 등록되면, 기존 LogoutHandler와 함께 커스텀 LogoutHandler도 동작하게 된다.
Last updated