시큐리티는 로그아웃을 했을때 적용하는 필터도 있다. 해당 필터의 내용은 간단하다.
너무 간단하니 말로 설명해보자면 클라이언트는 로그아웃이라는 요청을 보낸다. 그럼 서버에서는 해당 요청을 처리하게 되고 서버는 로그아웃에 대한 처리를 한다 대표적으로는 세션 무효화, 인증 토큰 삭제, 쿠키 정보 삭제를 시키고 로그인 페이지를 리다이렉트로 넘기기도 한다.
- 여기서 인증 토큰을 삭제 한다는 것은 우리가 SecurityContext 에 넣어놓았던 인증 객체를 말한다.
그럼 진행 순서를 한번 알아보자
- 사용자가 로그아웃 요청을 하면 LogoutFilter 에서 이 요청을 지나간다.
- 그럼 AntPathRequestMatcher가 해당 요청의 URL을 확인하고 맞다면 filter의 작업을 시작한다.
- 그럼 Context안에 있는 인증객체를 꺼내와서 삭제한다. 정확히는 null의 값으로 바꾼다고 하는것이 맞다
그럼 코드로 한번 알아보자
조금 작아서 알아보기 불편할 수 있지만 현재 스프링 부트 3.1.0 버전의 시큐리티가 또다시 변경되었다.
하나씩 알아보자
- logoutUrl("/logout") = 로그아웃을 처리하는 URL
- logoutSuccessUrl("/login") = 로그아웃이 된 후에 사용자에게 보여줄 페이지
- addLogoutHandler(logoutHandler()) = 로그아웃 핸들러
- 해당 사용자의 세션값을 무효화한다.
- logoutSuccessHandler(logoutSuccessHandler()) = 로그아웃 성공 후 핸들러
- 성공후 리다이렉트 될 URL을 보낸다.
- deleteCookies("JESSIONID", "remember-me") = 로그아웃 후 쿠키를 삭제한다
정리
로그아웃이라는 필터 자체로는 이해하기 어려운것은 없다. 그저 기존 사용자의 정보와 세션값을 서버에서 지운다. 라고 이해하면 될것같다 추후에 내가 프로젝트에 추가 할때도 Context에 저장되어있는 사용자의 정보와 토큰값을 지우면 된다.
'Spring > 👨💻 SpringSecurity' 카테고리의 다른 글
AnonymousAuthenticationFilter (0) | 2023.06.26 |
---|---|
RememberMeAuthenticationFilter (0) | 2023.06.26 |
CuncurrentSesseionFilter (0) | 2023.06.26 |
SessionManagementFilter(동시 세션 제어 / 세션 고정 보호 / 세션 정책) (0) | 2023.06.26 |
CSRF (0) | 2023.06.26 |