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)
)
참고
'Spring > Spring Security' 카테고리의 다른 글
[JWT] 2. AccessToken과 RefreshToken (0) | 2023.10.03 |
---|---|
[JWT] 1. JWT Token (0) | 2023.10.03 |
[Spring Security] 3-3. 인증: 패스워드 저장소 (0) | 2023.10.02 |
[Spring Security] 3-2. 인증: 아이디 / 패스워드 (2) | 2023.10.02 |
[Spring Security] 5. 예외 처리 (0) | 2023.09.30 |