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
반응형