이 포스트는 정수원님의 스프링 시큐리티 강의 수강 후 정리한 글입니다.
Remember-Me 인증
- Remember-Me란 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능
- 사용자 라이프 사이클
- 인증 성공(Remember-Me 쿠키 설정)
- 인증 실패(쿠키가 존재하면 쿠키 무효화)
- 로그아웃(쿠키가 존재하면 쿠키 무효화)
RememberMeAuthenticationFilter

- RememberMeAuthenticationFilter에 요청이 들어오면 RememberMeServices(Interface)로 이동한다.
- RememberMeAuthenticationFilter가 실행되는 2가지 조건
1) Authentication(인증 객체)가 null이라면 인증을 받지 않은 상태이기 때문에 Filter가 돌아간다.
2) Form Login시 사용자가 Remember-Me Cookie를 발급 받았다면 Filter가 돌아간다.
- RememberMeServices의 구현체로 1)TokenBasedRememberMeServices와 2)PersistentTokenBasedRememberMeServices가 존재한다.
1) TokenBasedRememberMeServices는 메모리에 저장된 Token과 User의 Token을 비교한다.
2) PersistentTokenBasedRememberMeSErvices는 영구적으로 저장된 Token과 User의 Token을 비교한다.
- User의 Token을 추출해 Remember-Me Token이 존재하는지 파악하는데, 존재하지 않으면 chain.doFilter로 존재한다면 Decode Token 단계를 통해 정상 유무를 판단한다.
- Token이 비정상이면 Exception이 발생하고 정상적이면 Token의 일치여부, User 계정 존재여부를 판단하고 마찬가지로 일치하지 않거나 존재하지 않으면 Exception아 발생한다.
- 모두 통과된다면 새로운 Authentication을 생성해 AuthenticationManager에 인증처리를 맡긴다.
http.rememberMe()
.rememberMeParameter("remember")
.tokenValiditySeconds(3600)
.userDetailsService(userDetailsService)
;