5. 인증 API - Logout, LogoutFilter
- request(/logout) 보내면
- Server에서는 세션 무효화, 인증토큰 삭제, 쿠키정보 삭제, 로그인 페이지로 리다이렉트 해줌
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin();
http
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.addLogoutHandler(new 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");
}
- LogoutFilter → AntPathRequestMatcher(/logout) 실패시 chain.doFilter → Authentication → SecurityContext → SecurityContextLogoutHandler
- 마지막 Handler 에서 세션무효화 ,쿠키 삭제, SecurityContextHandler.clearContext()
6. 인증 API - Remember Me 인증
- 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능
- Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 된다.
- 사용자 라이플 사이클
- 인증 성공(Remember-Me쿠키 설정)
- 인증 실패(쿠키가 존재하면 쿠키 무효화)
- 로그아웃(쿠키가 졵하면 쿠키 무효화)
.rememberMe()
.rememberMeParameter("remember")
.tokenValiditySeconds(3600)
.userDetailsService(userDetailsService);
7. 인증 API - RememberMeAuthenticationFilter
- 인증 객체가 없는경우
- remember-me 쿠키를 가지고 있는 경우
- jsession 쿠키가 없고 remember-me 쿠키가 있을 경우 발동
TokenBasedRememberMeServices
: 유효기간 설정해서 가지고있음
PersistenTokenBasedRememberMeServices
: DB에 저장하여 가지고있음