1. 로그아웃 아키텍쳐
- Spring Security는 기본적으로 로그아웃 기능을 지원함
소제목 | 설명 |
GET /logout |
- 로그아웃 확인 페이지 제공
- CSRF 토큰 포함 가능 ※ CSRF 비활성화 시 확인 페이지 없이 바로 로그아웃 |
POST /logout |
- 로그아웃 처리 동작 수행
① SecurityContextLogoutHandler: 세션 무효화 ② SecurityContextLogoutHandler: SecurityContext 제거 ③ TokenRememberService: RememberMe 제거 ④ CsrfLogoutHandler: CSRF 토큰 제거 ⑤ LogoutSuccessEventPublishingLogoutHandler: LogoutSuccessEvent 발행 → /login?logout 으로 리디렉션됨 |
2. 로그아웃 URIs 설정
- LogoutFilter는 AuthorizationFilter 전에 위치합니다
- 로그아웃 URI의 인가 작업이 필요하지 않습니다.
로그아웃 엔드포인트
- 명시적으로 permitAll() 지정 필요
예시) logoutUrl
로그아웃 성공 후 리다이렉트
- 리다이렉트 URI의 인가를 열어주기
예시) logoutSuccessUrl()
3. 로그아웃 핸들러
LogoutHandler
- 로그아웃 로직을 추가할 수 있음
예) 쿠키 삭제
더보기
더보기
http.logout(logout -> logout
.addLogoutHandler(new CookieClearingLogoutHandler("my-cookie")));
예) 브라우저 데이터 삭제 (Clear-Site-Data 헤더)
더보기
더보기
전체 데이터 삭제 (캐시, 스토리지, 쿠키 등)
http.logout(logout -> logout
.addLogoutHandler(new HeaderWriterLogoutHandler(new ClearSiteDataHeaderWriter(Directive.ALL)));
쿠키만 삭제
http.logout(logout -> logout
.addLogoutHandler(new HeaderWriterLogoutHandler(new ClearSiteDataHeaderWriter(Directive.COOKIES)));
LogoutSuccessHandler
- 로그아웃 이후 후처리 담당
- 예) 상태 반환 등
예시) logoutSuccessHandler
더보기
더보기
http.logout(logout -> logout
.logoutUrl("/v1/logout")
.logoutSuccessUrl("/v1/login")
.logoutSuccessHandler(logoutSuccessHandler)
)
4. 다양한 기능
쿠키 삭제
예) deleteCookies
5. 주의사항
Spring MVC 스타일로 로그아웃 구현
- SecurityContextLogoutHandler.logout() 호출 필수 (생략 시 실제로 로그아웃 되지 않음)
예시
더보기
더보기
@PostMapping("/my/logout")
public String logout(HttpServletRequest request,
HttpServletResponse response,
Authentication auth) {
SecurityContextLogoutHandler handler = new SecurityContextLogoutHandler();
handler.logout(request, response, auth);
return "redirect:/home";
}
참고
'Spring > Spring Security' 카테고리의 다른 글
[JWT] 2-2. Practical Application: AccessToken과 RefreshToken (0) | 2023.10.03 |
---|---|
[JWT] 1. Introduction (1) | 2023.10.03 |
[Spring Security] 3-3. Authentication: Password Storage (0) | 2023.10.02 |
[Spring Security] 3-2. Authentication: Username/Password (2) | 2023.10.02 |
[Spring Security] 5. 예외 처리 (0) | 2023.09.30 |