A Review of Filters


Spring Security의 Servlet은 Servlet Filter(javax.servlet)를 기반으로 하고 있기 때문에 필터의 역할을 살펴보는 것이 중요합니다. 보시는 그림은 하나의 HTTP 요청(request)에 대한 일반적인 Filter 계층을 보여주고 있습니다.

URI 경로를 기반으로 HttpServletRequest를 처리하는 필터는 서블릿을 포함하는 필터 사슬(filter chain)을 만듭니다.

스프링 MVC 애플리케이션에서 서블릿(Servlet)이라 함은 DispatherServlet을 말하며, 서블릿은 HttpServletRequest, HttpServletResponse를 처리 함에 있어 하나 이상의 Filter가 사용되어 HttpServletRequest, HttpServletResponse를 수정

DelegatingFilterProxy

Spring은 Servlet container의 생애주기(lifecycle)와 Spring ApplicationContext 사이에서 연결할 수 있는 DeleteatingFilterProxy라는 필터를 제공합니다.

기본적으로 스프링 서블릿 컨테이너(Servlet container)는 자체 표준으로 제시하는 필터등록을 허용합니다. 하지만, Spring Bean으로 정의되어 있는 필터는 제외하고 있습니다.

Spring Security에서는 DelegatingFilterProxy를 통하여 표준 서블릿 컨테이너 메커니즘을 통해 등록하는 필터 뿐만 아니라, Spring Bean으로 구현한 모든 필터를 등록하고 위임하는 형태로 여과 작업을 진행합니다.

FilterChainProxy

Spring Security의 실질적인 서블릿 지원은 FilterChainProxy 내에 포함되어 있습니다.

FilterChainProxy는 Spring Security에서 제공하는 특수 필터로 다양한 필터 인스턴스를 SecurityFilterChain을 통해 위임합니다.

FilterChainProxy는 Spring Bean으로 DelegatingFilterProxy을 통하고 있습니다.

SecurityFilterChain

SercurityFilterChain의 Security Filter들은 기본적으로 Spring Bean 뿐만 아니라 DelegatingFilterProxy라 할 수 있는 FilterChainProxy에 등록할 수 있습니다.

여러 SecurityFilterChain에서 FilterChainProxy는 SecurityFilterChain을 선택하고 사용합니다.

SecurityFilterChain이 동작하는 URL을 등록하고, 해당 요청이 있을 경우 FilterChainProxy를 통해서 다수의 SecurityFilterChain 중 요청 URL에 맞는 SecurityFilterChain을 선택하고 실행하게 됩니다.

Filter Stack

Spring Security에서 Filter는 기본적으로 Servlet Engine의 Filter 인터페이스를 상속하게 됩니다.

추가적으로 Spring Security에서 제공되는 여러 FIlter 관련 인터페이스를 제공하고 있습니다.

Spring Security Filters