스프링 시큐리티 - Logout 기능

SeungTaek·2022년 2월 11일
1
post-thumbnail

본 게시물은 스스로의 공부를 위한 글입니다.
잘못된 내용이 있으면 댓글로 알려주세요!

스프링 시큐리티가 제공하는 Logout 기능은 세션 무효화, 인증토큰 삭제, 쿠키 정보 삭제, 로그인 페이지로 리다이렉트 등이 있다.
아래 설정 코드를 보자.

http.logout() // 로그아웃 기능 작동함
  .logoutUrl("/logout") // 로그아웃 처리 URL, default: /logout, 원칙적으로 post 방식만 지원
  .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지
  .deleteCookies("JSESSIONID", "remember-me") // 로그아웃 후 쿠키 삭제
  .addLogoutHandler( ...생략... ) // 로그아웃 핸들러
  .logoutSuccessHandler( ...생략... ) // 로그아웃 성공 후 핸들러
  1. logoutUrl로 로그아웃 처리 Url을 커스텀해줄 수 있다. 기본 주소는 /logout이며 원칙적으로는 post방식으로 요청해야 로그아웃된다.
  2. .logoutSuccessUrl 로그아웃 정상 처리 후 리다이렉트 주소를 설정할 수 있다.
  3. deleteCookies 로그아웃 정상 처리 후 쿠키 삭제를 설정해줄 수 있다. 이때 JSESSIONID가 로그인 토큰이며 remember-me는 다음 게시물에서 배울 토큰이다.
  4. addLogoutHandler, .logoutSuccesshandler로 여러 핸들러를 등록할 수 있다.

기본으로 제공된 로그인 페이지의 소스는 다음과 같다.

정말로 post방식을 사용하는 것을 볼 수 있다. 또한 csrf를 사용하는 것도 확인할 수 있다.


Logout 로직(LogoutFilter)

  1. AntPathRequestMatcher(/logout) : 로그아웃 요청이 올바른 url로 들어왔는지 확인(logoutUrl()로 커스텀 가능)
  2. SecurityContext에서 Authentication객체를 꺼내 SecurityContextLogoutHandler에게 전달
  3. SecurityContextLogoutHandler가 세션 무효화, 쿠키 삭제, Authentication=null, SecurityContextHolder.clearContext() 등을 진행
  4. 로그아웃이 성공되면 SimpleUrlLogoutSuccessHandler을 통해 특정 페이지로 redirect (이때 리다이렉트 주소는 커스텀할 수 있다.)


Reference

인프런 '스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security' (정수원)

profile
I Think So!

0개의 댓글