Skip to content
This repository was archived by the owner on Mar 2, 2023. It is now read-only.

2. FilterChain

강교일(Mambo) edited this page Mar 11, 2020 · 3 revisions

스프링 시큐리티는 서블릿 기반의 애플리케이션의 서블릿 필터에 대한 지원을 제공합니다.

서블릿 필터 체인에 대해서 알아보며 스프링 시큐리티가 제공하는 특별한 필터인 SpringSecurityFilterChain에 대해서 확인합니다.

Servlet Filters

DelegatingFilterProxy

스프링은 ApplicationContext과 서블릿 컨테이너 라이프사이클과 연결할 수 있는 DelegatingFilterProxy라는 이름의 Filter 구현체를 제공합니다. DelegatingFilterProxy는 표준 서블릿 매커니즘에 의해 등록할 수 있으나 모든 행위는 스프링 Bean 필터에 위임합니다.

FilterChainProxy

스프링 시큐리티의 서블릿 지원은 FilterChainProxy에 포함되어 있습니다. FilterChainProxy는 스프링 시큐리티가 제공하는 특별한 필터로 DelegatingFilterProxy에 의해 감싸져 SpringSecurityFilterChain을 통해 필터를 위임합니다.

SpringSecurityFilterChain

SpringSecurityFilterChain은 FilterChainProxy에서 스프링 시큐리티 필터를 판별하는데 사용됩니다. SpringSecurityFilterChain도 일반적인 필터이지만 DelegatingFilterProxy가 아닌 FilterChainProxy에 등록됩니다.

위 그림에서 SecurityFilterChain에 등록된 스프링 시큐리티 필터 구현체는 어떤것이 있는지 살펴보겠습니다.

SecurityFilterChain에 대한 디버그 레벨을 지정하면 필터와 체인 순서를 확인할 수 있습니다.

Security filter chain: [
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  LogoutFilter
  UsernamePasswordAuthenticationFilter
  DefaultLoginPageGeneratingFilter
  DefaultLogoutPageGeneratingFilter
  ConcurrentSessionFilter
  BasicAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]

Security Filters

다음은 스프링 시큐리티가 제공하는 모든 필터 목록과 순서입니다.

  • ChannelProcessingFilter
  • ConcurrentSessionFilter
  • WebAsyncManagerIntegrationFilter
  • SecurityContextPersistenceFilter
  • HeaderWriterFilter
  • CorsFilter
  • CsrfFilter
  • LogoutFilter
  • OAuth2AuthorizationRequestRedirectFilter
  • Saml2WebSsoAuthenticationRequestFilter
  • X509AuthenticationFilter
  • AbstractPreAuthenticatedProcessingFilter
  • CasAuthenticationFilter
  • OAuth2LoginAuthenticationFilter
  • Saml2WebSsoAuthenticationFilter
  • UsernamePasswordAuthenticationFilter
  • ConcurrentSessionFilter
  • OpenIDAuthenticationFilter
  • DefaultLoginPageGeneratingFilter
  • DefaultLogoutPageGeneratingFilter
  • DigestAuthenticationFilter
  • BearerTokenAuthenticationFilter
  • BasicAuthenticationFilter
  • RequestCacheAwareFilter
  • SecurityContextHolderAwareRequestFilter
  • JaasApiIntegrationFilter
  • RememberMeAuthenticationFilter
  • anonymousAuthenticationFilter
  • OAuth2AuthorizationCodeGrantFilter
  • SessionManagementFilter
  • ExceptionTranslationFilter
  • FilterSecurityInterceptor
  • SwitchUserFilter

스프링 시큐리티는 인증과 접근 제어에 대한 적용을 기본적으로 제공해줍니다. 하지만, 어떤 처리과정에서 인증이나 접근 권한이 거부되었는지 알기 어렵다는 점은 단점이 될 수 있습니다.

우리는 일반적인 웹 요청에 대한 SpringSecurityFilterChain 이라는 특별한 필터를 알아보았으며 이와 함께 등록되는 다양한 스프링 시큐리티 필터 구현체와 적용 순서를 확인했습니다. 따라서, 웹 요청에 대해 어느 필터에 의해 처리되고 있는지를 파악할 수 있게 되었습니다.

참고

Clone this wiki locally