Logout Flow
- Client가 POST 방식으로 /logout url로 접근함.
- Server가 세션을 무효화, 인증토근 삭제, 쿠키정보 삭제
- Client 화면을 로그인 페이지로 이동.
Logout Config Code
- .logout : 로그아웃 기능을 사용
- .logoutUrl("/logout") : 로그아웃 진행을 하려면 해당 경로로 접근을 해야함.
- .logoutSuccessUrl("/login") : 로그 아웃이 완료되면 해당 경로로 이동함.
- .addLogoutHandler(new LogoutHandler() {} : 로그아웃시 session 삭제 작업을 수행하는 handler
- .logoutSuccessHandler(new LogoutSuccessHandler() {} : 로그아웃 완료시 원하는 Url로 이동 시킴. 앞에 있는 .logoutSuccessUrl("/login")과 의 차이점은 좀 더 많은 설정을 할 수 있다는 것임.
- .deleteCookies("remember-me") : 쿠키를 삭제
여기서 사용하는 Handler들은 기본적으로 LogoutFilter가 사용되면 자동적으로 수행하는 업무들임.
http
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.addLogoutHandler(new LogoutHandler() {
@Override
public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) {
HttpSession session = httpServletRequest.getSession();
session.invalidate();
}
})
.logoutSuccessHandler(new LogoutSuccessHandler() {
@Override
public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
httpServletResponse.sendRedirect("/login");
}
})
.deleteCookies("remember-me")
;
}
LogoutFilter
- Client가 LogoutFilter를 통해 logout POST요청을 보냄
- AntPathRequestMatcher가 /logout 경로가 맞는지 확인함.
- 요청한 경로가 아닌 경우 chain.doFilter를 수행
- SecurityContext가 Client정보가 있는 Authentication을 가지고 와서 Filter에게 넘겨줌.
- SecurityContextLogoutHandler가 세션 무효화, 쿠키 삭제 그리고 SecurityContextHolder.clearContext() 메소드를 통해 Authentication 객체를 삭제함.
- 성공적으로 인증객체가 삭제가 되면 login 페이지로 이동시킴.
'Backend > Security' 카테고리의 다른 글
AnonymousAuthenticationFilter (0) | 2023.01.03 |
---|---|
Remember Me 인증 (0) | 2023.01.03 |
UsernamePasswordAuthenticationFilter (0) | 2023.01.03 |
Boot Security (0) | 2023.01.02 |
JWT(JSON Web Token) (0) | 2023.01.02 |