Spring Security의 Servlet은 Servlet Filter(javax.servlet)
를 기반으로 하고 있기 때문에 필터의 역할을 살펴보는 것이 중요합니다. 보시는 그림은 하나의 HTTP 요청(request)에 대한 일반적인 Filter 계층을 보여주고 있습니다.
URI 경로를 기반으로 HttpServletRequest를 처리하는 필터는 서블릿을 포함하는 필터 사슬(filter chain)을 만듭니다.
스프링 MVC 애플리케이션에서 서블릿(Servlet)이라 함은 DispatherServlet
을 말하며, 서블릿은 HttpServletRequest, HttpServletResponse를 처리 함에 있어 하나 이상의 Filter가 사용되어 HttpServletRequest, HttpServletResponse를 수정
Spring은 Servlet container의 생애주기(lifecycle)와 Spring ApplicationContext
사이에서 연결할 수 있는 DeleteatingFilterProxy라는 필터를 제공합니다.
기본적으로 스프링 서블릿 컨테이너(Servlet container)는 자체 표준으로 제시하는 필터등록을 허용합니다. 하지만, Spring Bean으로 정의되어 있는 필터는 제외하고 있습니다.
Spring Security에서는 DelegatingFilterProxy를 통하여 표준 서블릿 컨테이너 메커니즘을 통해 등록하는 필터 뿐만 아니라, Spring Bean으로 구현한 모든 필터를 등록하고 위임하는 형태로 여과 작업을 진행합니다.
Spring Security의 실질적인 서블릿 지원은 FilterChainProxy
내에 포함되어 있습니다.
FilterChainProxy는 Spring Security에서 제공하는 특수 필터로 다양한 필터 인스턴스를 SecurityFilterChain을 통해 위임합니다.
FilterChainProxy는 Spring Bean으로 DelegatingFilterProxy을 통하고 있습니다.
SercurityFilterChain의 Security Filter들은 기본적으로 Spring Bean 뿐만 아니라 DelegatingFilterProxy
라 할 수 있는 FilterChainProxy
에 등록할 수 있습니다.
여러 SecurityFilterChain에서 FilterChainProxy는 SecurityFilterChain을 선택하고 사용합니다.
SecurityFilterChain이 동작하는 URL을 등록하고, 해당 요청이 있을 경우 FilterChainProxy를 통해서 다수의 SecurityFilterChain 중 요청 URL에 맞는 SecurityFilterChain을 선택하고 실행하게 됩니다.
Spring Security에서 Filter는 기본적으로 Servlet Engine의 Filter 인터페이스를 상속하게 됩니다.
추가적으로 Spring Security에서 제공되는 여러 FIlter 관련 인터페이스를 제공하고 있습니다.
ChannelProcessingFilter
which would force the login form and any to the /secure path to be made over HTTPS
SecurityContextPersistenceFilter
SecurityContext의 지속성을 위해서 필요한 Filter. HttpSession의 Attribute로 SecurtyContext가 저장되게 되는데, 이렇게 이용자의 request에 SecurityContext 보안 관련된 설정값을 영속하기 위해서 필요한 필터.
ConcurrentSessionFIlter
동시 세션의 수를 관리하고 설정에 따라 세션을 만료시키는 등의 동작을 수행하게 된다.
HeaderFilter
헤더 값에 대한 설정할 경우 해당 필터를 활용하게 된다.
CsrfFilter
CSRF는 취약점 공격중에 하나로 이용자의 의지와 무관하게 공격자가 의도하는 행위를 특정사이트에 요청하게 되는 공격을 말한다. 이를 방지하기 위하여 csrf token을 발행하여 HTTP를 통한 요청에 대해서 응답 내용으로 전송하고 이용자의 요청에도 해당 csrf token을 확인하는 등으로 공격을 막는다. 이러한 CSRF 공격에 대하여 처리할 수 있는 필터.
LogoutFilter
로그아웃을 위한 Filter.
X509AuthenticationFilter
X.509는 암호화에서 공개키 인증서와 인증 알고리즘 표준에서 공개키 기반의 ITU-T 표준입니다. 이를 처리하기 위한 필터.
AbstractPreAuthenticationProcessingFilter
사전 인증 된 요청을 처리하는 필터를 위한 기본 클래스입니다. 인증의 주체가 이미 외부 시스템에 의해 인증 되었다고 가정하고 해당 필터를 활용하게 됩니다.