[Spring Security] 기본 필터 소개

2023. 3. 6. 23:19Spring/Security

스프링 시큐리티는 웹 요청에 관련된 필터 체인을 제공해준다. 이 필터들이 어떤 역할을 하는지 개략적으로 알아보도록 한다.

스프링 시큐리티 기본 필터

스프링 시큐리티에서 기본적으로 제공하는 필터는 다음과 같다. 참고로 이 스프링 시큐리티의 버전은 5.7.7이다.

 

먼저 이 필터들이 어떤 동작을 하는지 간략히 설명하고 나서 중요한 필터들에 대해 자세히 설명하도록 하겠다.

 

  1. DisableEncodeUrlFilter
    • 세션 ID가 URL에 포함되는 것을 막기 위해 HttpServletResponse를 사용해서 URL이 인코딩 되는 것을 막기 위한 필터이다.
  2. WebAsyncManagerIntegrationFilter
    • SpringSecurityContextHolder는 기본적으로 ThreadLocal 기반으로 동작하는데, 비동기와 관련된 기능을 쓸 때에도 SecurityContext를 사용할 수 있도록 만들어주는 필터이다.
  3. SecurityContextPersistenceFilter
    • SecurityContext가 없으면 만들어주는 필터이다.
    • SecurityContext는 Authentication 객체를 보관하는 인터페이스이다.
    • SecurityContext를 통해 한 요청에 대해서 어떤 필터에서도 같은 Authentication 객체를 사용할 수 있다.
  4. HeaderWriterFilter
    • 응답에 Security와 관련된 헤더 값을 설정해주는 필터이다.
  5. CsrfFilter
    • CSRF 공격을 방어하기 위한 설정을 하는 필터이다.
  6. LogoutFilter
    • 로그아웃 요청을 처리하는 필터이다.
    • 아래에 DefaultLogoutPageGeneratingFilter가 로그아웃 기본 페이지를 생성한다.
  7. UsernamePasswordAuthenticationFilter
    • username과 password를 쓰는 form 기반 인증을 처리하는 필터이다.
    • AuthenticationManager를 통한 인증을 실행한다.
    • 성공하면 Authentication 객체를 SecurityHolder에 저장한 후 AuthenticationSuccessHandler를 실행한다.
    • 실패하면 AuthenticationFailureHandler를 실행한다.
  8. DefaultLoginPageGeneratingFilter
    • 로그인 기본 페이지를 생성하는 필터이다.
  9. DefaultLogoutPageGeneratingFilter
    • 로그아웃 기본 페이지를 생성하는 필터이다.
  10. BasicAuthenticationFilter
    • HTTP header에 인증 값을 담아 보내는 BASIC 인증을 처리하는 필터이다.
  11. RequestCacheAwareFilter
    • 인증 처리 후 원래의 Request 정보로 재구성하는 필터이다.
  12. SecurityContextHolderAwareRequestFilter
    • 서블릿 API 보안 메서드를 구현하는 요청 래퍼로 서블릿 요청을 채우는 필터이다.
  13. AnonymousAuthenticationFilter
    • 이 필터에 올 때까지 사용자가 인증되지 않았다면, 이 요청은 익명의 사용자가 보낸 것으로 판단할 수 있다. 이 익명 사용자에 관한 처리를 하는 필터이다.
  14. SessionManagementFilter
    • 세션 생성 전략을 설정하는 필터이다. 최대 동시 접속 세션을 설정하고, 유효하지 않은 세션으로 접근했을 때의 처리, 세션 변조 공격 방지 등의 처리를 담당한다.
  15. ExceptionTranslationFilter
    • 필터 처리 과정에서 인증 예외 또는 인가 예외가 발생한 경우 해당 예외를 잡아서 처리하는 필터이다.
  16. FilterSecurityInterceptor
    • 인가를 결정하는 AccessDicisionManager에게 접근 권한이 있는지 확인하고 처리하는 필터이다.
    • 앞 필터들을 통과할 때 인증 또는 인가에 문제가 있으면 ExceptionTranslationFilter로 예외를 던진다.