정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!
로그아웃
- 스프링 시큐리티는 기본적으로 DefaultLogoutPageGeneratingFilter를 통해 로그아웃 페이지를 제공하며 "GET /logout" URL로 접근이 가능함 → 로그아웃 버튼 클릭을 통해 "POST /logout"
- 로그아웃 실행은 기본적으로 "POST /logout"으로만 가능
- CSRF 기능을 비활성화 or RequestMatcher를 사용 ≫ GET, PUT, DELETE 모두 가능
- 로그아웃 필터를 거치지 않고 스프링 MVC에서 커스텀하게 구현할 수 있음
- 로그인 페이지가 커스텀하게 생성될 경우 로그아웃 기능도 커스텀하게 구현해야 함
logout() API
- logoutUrl : 로그아웃이 발생하는 URL 지정
- 기본값은 "/logout"
- logoutRequestMatcher : 로그아웃이 발생하는 RequestMatcher을 지정
- logoutUrl보다 우선적
- Method를 지정하지 않으면 어떤 HTTP 메서드로 요청되어도 로그아웃 할 수 있음
- logoutSuccessUrl : 로그아웃이 발생한 후 리다이렉션 될 URL
- 기본값은 "/login?logout"
- 지정된 url은 인증되지 않은 사용자도 접근이 가능해야 함 ≫ auth.requestMatchers("/loginSuccess").permitAll()
- logoutSuccessHandler : 사용할 LogoutSuccessHandler를 설정
- 이것이 지정되면 logoutSuccessUrl은 무시됨
- deleteCookies : 로그아웃 성공 시 제거될 쿠키의 이름 지정
- invalidateHttpSession : HttpSession을 무효화
- 기본값은 true
- clearAuthentication : 로그아웃 시 SecurityContextLogoutHandler가 인증(Authentication)을 삭제해야 하는지 여부
- 기본값은 true
- addLogoutHandler : 기존 로그아웃 핸들러 뒤에 새로운 LogoutHandler를 추가
- permitAll : logoutUrl(), RequestMatcher()의 URL에 대한 모든 사용자의 접근을 허용
- invalidateHttpSession, clearAuthentication 등은 웬만하면 설정하지 않음
- 로그아웃 이후 리다이렉트 url만 지정하려면 logoutSuccessUrl로 / 특정 작업을 수행하기 위해서는 logoutSuccessHandler
LogoutFilter
client
↓ Post /logout
↓
LogoutFilter
↓
RequestMatcher : 요청 정보가 매칭되는지 확인
- Http Method 확인 (Post가 맞는지)
- url 확인 ("/logout"이 맞는지)
↓
Yes
↓
LogoutHandler : 여러 역할의 Handler 존재
- 하나씩 돌면서 역할 수행
- SecurityConfig에서 addLogoutHandler를 추가했다면 해당 Handler도 포함하여 수행
↓
LogoutSuccessHandler
- SecurityConfig에서 logoutSuccessHandler를 추가했다면 해당 Handler 수행
No
↓
chain.doFilter
요청정보가 매칭되지 않으면 다음 필터로 패스
동작 과정
1. 로그아웃 요청 : GET /logout
- 스프링에서 기본으로 제공하는 Logout 페이지로 이동
- Log Out 버튼을 누르면 POST /logout으로 서버에 요청됨
2. Log Out 버튼 클릭
3. logoutSuccessUrl에 설정한 url이 있다면 해당 url로 리다이렉트
'spring security' 카테고리의 다른 글
요청 캐시 RequestCache / SavedRequest (0) | 2025.01.31 |
---|---|
익명 인증 사용자 - anonymous() (0) | 2025.01.28 |
기억하기 인증 필터 - RememberMeAuthenticationFilter (0) | 2025.01.28 |
기억하기 인증 - rememberMe() (0) | 2025.01.28 |
기본 인증 필터 - BasicAuthenticationFilter (0) | 2025.01.27 |