Backend 개발/Spring Security 6
Spring Security 6 RememberMeAuthenticationFilter(기억하기 인증 필터)란?
수달리즘
2025. 5. 28. 10:40
반응형
RememberMeAuthenticationFilter
- 기억하기 인증(RememberMe) 에 사용되는 필터
- SecurityContextHolder에 Authentication(인증 정보)이 포함되지 않았을 때 실행되는 필터
→ 폼(form) 인증 혹은 httpBasic 인증을 하면 모두 인증 상태를 유지하기 위해 SecurityContextHolder에 Authentication을 저장함. 즉, 인증이 된 상태에서는 해당 필터가 실행될 필요가 없음
→ 인증 상태가 아닌 경우에만 작동 - 세션이 만료되었거나 어플리케이션 종료로 인해 인증 상태가 소멸된 경우 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 자동 로그인 처리 수행
// RememberMeAuthenticationFilter 코드 일부
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
if (this.securityContextHolderStrategy.getContext().getAuthentication() != null) {
this.logger.debug(LogMessage.of(() -> {
return "SecurityContextHolder not populated with remember-me token, as it already contained: '" + this.securityContextHolderStrategy.getContext().getAuthentication() + "'";
}));
chain.doFilter(request, response);
} else {
Authentication rememberMeAuth = this.rememberMeServices.autoLogin(request, response);
..
}
..
chain.doFilter(request, response);
}
}
흐름도
RememberMeAuthenticationFilter 필터의 처리 과정은 UsernamePasswordAuthenticationFilter 와 흐름이 비슷하지만 작은 차이가 있다.
- RememberMeAutheticationToken 생성 시 UserDetails + Authorities, 즉 사용자 정보를 가지고 토큰을 만들지만 UsernamePasswordAuthenticationFilter 는 토큰 생성 시 username과 password 정보를 기반으로 토큰을 생성한다.
- 인증 실패 시 remember-me 쿠키를 지움
- 인증 성공했을 경우에는 UsernamePasswordAuthenticationFilter의 경우와 거의 동일하다.
728x90
반응형