본 게시물은 스스로의 공부를 위한 글입니다.
잘못된 내용이 있으면 댓글로 알려주세요!
스프링 시큐리티가 제공하는 Logout 기능은 세션 무효화, 인증토큰 삭제, 쿠키 정보 삭제, 로그인 페이지로 리다이렉트 등이 있다.
아래 설정 코드를 보자.
http.logout() // 로그아웃 기능 작동함
.logoutUrl("/logout") // 로그아웃 처리 URL, default: /logout, 원칙적으로 post 방식만 지원
.logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지
.deleteCookies("JSESSIONID", "remember-me") // 로그아웃 후 쿠키 삭제
.addLogoutHandler( ...생략... ) // 로그아웃 핸들러
.logoutSuccessHandler( ...생략... ) // 로그아웃 성공 후 핸들러
logoutUrl
로 로그아웃 처리 Url을 커스텀해줄 수 있다. 기본 주소는 /logout
이며 원칙적으로는 post
방식으로 요청해야 로그아웃된다..logoutSuccessUrl
로그아웃 정상 처리 후 리다이렉트 주소를 설정할 수 있다.deleteCookies
로그아웃 정상 처리 후 쿠키 삭제를 설정해줄 수 있다. 이때 JSESSIONID
가 로그인 토큰이며 remember-me
는 다음 게시물에서 배울 토큰이다.addLogoutHandler
, .logoutSuccesshandler
로 여러 핸들러를 등록할 수 있다.기본으로 제공된 로그인 페이지의 소스는 다음과 같다.
정말로 post
방식을 사용하는 것을 볼 수 있다. 또한 csrf를 사용하는 것도 확인할 수 있다.
LogoutFilter
)AntPathRequestMatcher(/logout)
: 로그아웃 요청이 올바른 url로 들어왔는지 확인(logoutUrl()
로 커스텀 가능)SecurityContext
에서 Authentication
객체를 꺼내 SecurityContextLogoutHandler
에게 전달SecurityContextLogoutHandler
가 세션 무효화, 쿠키 삭제, Authentication=null
, SecurityContextHolder.clearContext()
등을 진행SimpleUrlLogoutSuccessHandler
을 통해 특정 페이지로 redirect (이때 리다이렉트 주소는 커스텀할 수 있다.)인프런 '스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security' (정수원)