서버와 클라이언트 사이의 요청과 응답을 처리할때마다 실행되는 자바 클래스로이다.
요청이 DispatchServlet에 도달하기 전에 한번, 응답이 DispatchServlet으로부터 클라이언트에 전달되기 전에 한번 실행된다.
Spring Security는 인증과 인가에 관련된 작업을 Filter의 흐름에 따라 처리한다.


Servlet 컨테이너는 필터 인스턴스를 등록하는 것이 가능하지만, 스프링에서 정의된 빈은 주입받지 못한다.
이러한 문제를 해결하기 위해 DelegatingFilterProxy가 Servlet 컨테이너의 생명주기와 ApplicationContext 사이에 다리를 놓아주는 역할을 한다.
DelegatingFilterProxy를 통해 Servlet 컨테이너에서 필터로서 동작하지만 실제로는 컨텍스트에 정의된 빈에게 필터 작업을 위임한다.

클라이언트 요청 URI에 따라 필요한 필터 인스턴스와 서블릿을 포함하는 필터체인을 정의한다.
FilterChainProxy는 빈이기 때문에 DelegatingFilterProxy로 래핑되어서 사용된다.


현재 요청에 대해 어떤 보안필터 인스턴스를 호출할지를 결정하기 위해 FilterChainProxy를 사용한다.

FilterChainProxy는 요청된 URL 패턴에 따라 SecurityFilterChain을 호출할 수 있다.
예시로, 위 그림에서SecurityFilterChain.0에서 요청된 URL 패턴이 일치하면 호출하고 일치하는 인스턴스가 없다면 SecurityFilterChain.n 이 호출된다.
각 SecurityFilterChain은 고유할 수 있고 개별적으로 구성가능하다.

| 필터이름 | 설명 |
|---|---|
SecurityContextPersistenceFilter | HTTP 요청이 처리될 때 SecurityContext를 httpSession에 저장하고 복원하는 역할. 인증 정보가 요청간에 유지되도록 함 |
LogoutFilter | 로그아웃 요청을 감지하고 처리 |
UsernamePasswordAuthenticationFilter | 사용자 이름과 비밀번호 기반의 인증 요청을 처리. 폼 로그인시 필터 활성화 |
DefaultLoginPageGenerationFilter | 사용자 정의 로그인 페이지가 없을 시, 기본 로그인 페이지 생성 |
BasicAuthenticationFilter | HTTP 기본 인증 헤더를 검사하여, 인증을 수행. 요청 헤더에서 사용자 이름과 비밀번호를 추출하고, 인증 시도 |
RememberMeAuthenticationFilter | "Remember Me" 인증 처리. 사용자가 사이트 재방문 시로 그인 유지에 사용 |
SecurityContextHolderAwareRequestFilter | 보안 관련 메소드를 Servlet API에 통합 |
AnonymousAuthenticationFilter | 사용자가 인증되지 않은 경우, 익명 사용자로 인식 |
Exception TranslationFilter | 보안 처리 중 발생하는 예외를 처리하고 적절한 예외에 따라 '인증/권한 부여 실패' 페이지로 리다이렉트 |
FilterSecurityInterceptor | 인증된 요청이 접근 제어 정책에 따라 허용되는지 확인. 접근 결정 관리자를 사용하여, 요청된 URL접근 허용 결정 |