SPRING/spring security
🌱👮🏿♀️Spring Security (3) - Logout 처리, LogoutFilter 동작 순서
개발하는 정복자
2022. 5. 24. 12:16
이전 챕터
🌱👮🏿♀️Spring Security (2) - Login Form 인증, FormLoginFilter 동작 순서
🙉 로그아웃(POST) 처리 과정
- Client 👉🏾 Server : request(/logout)- Server 👉🏾 Client:
- 세션 무효화
- 인증토큰 삭제 (SecurityContext 포함)
- 쿠키정보 삭제
- 로그인 페이지 다이렉트
🙈 LogoutFilter 동작 순서
☝🏿. LoginFilter
✌🏿. AntPathRequestMatcher("/logout")
- url "/logout"으로 요청이 왔는지 확인
- 아니면 다음 필터로 ~
🤟🏿. Authentication이 SecutiryContext로 부터 인증된 객체를 꺼내온다.
🐍(巳(뱀 사). SecutiryContextLogoutFilter 작동
- 세션 무효화
- 쿠키 삭제
- SecurityContextHolder.clearContext() 작동 (SecutiryContext 삭제)
✋. SimpleUrlLogoutSuccessHandlerFilter로 login 페이지로 이동
코드로 보자!
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.logout()
.logoutUrl("/logout") // default : /logout
.logoutSuccessUrl("/login") // login 성공 후 이동 페이지
.addLogoutHandler(new LogoutHandler() { // 로그아웃 핸들러 설정, LogoutHandler를 구현하면 됨
@Override
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
HttpSession session = request.getSession();
session.invalidate(); // 세션 무효화
}
})
.logoutSuccessHandler(new LogoutSuccessHandler() { // 로그아웃 성공 후 핸들러 호출
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
response.sendRedirect("/login");
}
})
.deleteCookies("remember-me") // 쿠키 삭제
;
}
}