Spring/Spring Security

[Spring Security] 3-4. 인증: 로그아웃

noahkim_ 2023. 10. 3. 00:23

1. 로그아웃 아키텍쳐

  • Spring Security는 기본적으로 로그아웃 기능을 지원합니다.
  • 기본 URI로 GET /logout, POST /logout가 있습니다.
    • GET /logout : 로그아웃 확인 페이지를 보여줍니다
    • POST /logout : 로그아웃에 필요한 CSRF Token을 제공합니다.
  • POST /logout 로 요청할 경우, 여러 LogoutHandler가 동작하여 작업합니다.
    • SecurityContextLogoutHandler가 HTTP Session을 무효화 합니다.
    • SecurityContextLogoutHandler가 SecurityContextHolderStrategy를 비웁니다.
    • SecurityContextLogoutHandler가 SecurityContextRepository를 비웁니다.
    • TokenRememberService가 RememberMe 인증 객체를 지웁니다.
    • CsrfLogoutHandler가 CSRF Token을 비웁니다.
    • LogoutSuccessEventPublishingLogoutHandler가 LogoutSuccessEvent를 발행합니다
  • 로그아웃 작업이 끝나면, /login URI로 리다이렉트 됩니다.

 

2. 로그아웃 URIs 설정하기

  • LogoutFilter는 AuthorizationFilter 전에 위치합니다
  • 로그아웃 URI의 인가 작업이 필요하지 않습니다.
  • 만약 로그아웃 URI이 커스터마이징 되었다면 인가 설정을 해주어야 합니다.
http.logout((logout) -> logout.logoutUrl("/my/logout/uri"))

 

  • 로그아웃 성공 시 리다이렉트 하고 싶다면, 리다이렉트 URI의 인가를 열어주어야 합니다.
http
    .logout((logout) -> logout
        .logoutSuccessUrl("/my/success/endpoint")
        .permitAll()
    )

 

2. 로그아웃 성공 처리 커스터마이징하기 - LogoutSuccessHandler

  • HttpSecurity API 호출을 통해 LogoutSuccessHandler를 추가합니다.
http.logout(logout -> logout
	        .logoutUrl("/v1/logout")
                .logoutSuccessUrl("/v1/login")
                .logoutSuccessHandler(logoutSuccessHandler)
        )

 

참고