Filter :
。Spring으로 수신된 모든 요청 및 내부에서 forward되는 요청을 검증하는 역할을 수행

。이미 Dispatcher Servlet에서 수신되면서 Filter에 의해 이미 검증된 Request를 내부 다른 요소에 forward되면서 Filter를 매번 거치는거는 비효율적.
필터 종류
。Servlet Filter와 Spring Filter가 존재
Servlet Filter
。요청이 어플리케이션 내 Servlet 간 이동 시 filter가 각각 새로운 요청으로 간주하여 항상 검증을 수행
。 Dispatcher Servlet에서 요청을 수신 시 각 다른 Servlet으로 요청을 전달하면서 필터에서 각 전달되는 이미 검증된 요청의 검증을 반복하는 비효율이 존재
。기본적으로 Spring Bean을 사용하지 않는다.
▶ Spring Filter에서는 Delegating Filter Proxy를 사용하여 Spring Bean을 사용하도록 설정.
Spring Filter

。Servlet Filter 사이에 Delegating Filter Proxy를 통해 구현된 Spring Bean을 의존성 주입 받아서 Filter로서 사용가능하도록하는 Filter
。기존 Servlet Filter의 요청이 어플리케이션 내에서 forward되면서 매번 검증하는 기능을 개선하기위해 OncePerRequestFilter를 상속한 필터구현체를 SecurityFilterChain에 포함하여 의존성주입 받아 Filter로 사용하여 한번만 검증하도록 개선
▶ 기술면접에서 자주 등장
Delegating Filter Proxy :
。Filter Chain 사이에 Spring Bean으로 구현된 Spring Bean Filter를 의존성 주입하여 사용할 수 있도록 만드는 프록시객체
。외부에서 Web Security Configuration으로서 @Configuration Class로 정의한 SecurityFilterChain을 Spring Bean으로서 등록 시 Delegating Filter Proxy를 통해 Servlet Filter Chain에 포함되어 필터로서 기능
▶ 해당 기능을 사용하여 Dispatcher Servlet에 요청이 전달 될 때 검증만 수행하고 내부에서 forward되는 요청은 검증하지 않는 filter를 설정하는 OncePerRequestFilter를 SecurityFilterChain에 추가하여 FilterChain에 포함하도록 설정
Filter : jakarta.servlet
。Servlet Filter 인터페이스

。모든 Filter는 해당 인터페이스를 구현 및 구현메소드 ( doFilter() )를 상속
▶ 해당 Filter를 구현 시 Filter Chain에 포함됨
OncePerRequestFilter
。Servlet Filter에서 요청에 대해 여러번 중복해서 검증하는 로직을 개선하는 Filter 구현체
▶ Dispatcher Servlet에 요청의 수신하는 시점에서만 검증하고 나머지 forward 시는 검증을 skip하도록 설정
。검증기능이 설정된 커스텀 Filter 구현체 생성 시 해당 OncePerRequestFilter를 상속하도록 설정
▶ 해당 OncePerRequestFilter를 상속한 Filter 구현체를 SpringFilterChain의 HttpStatus.addFilterBefore(new Filter구현체())로 설정
▶ 이후 해당 SpringFilterChain은 Delegating Filter Proxy에 의해 의존성주입 받아서 Servlet Filter 사이에서 Filter로서 기능
。Filter에 의한 필터링이 완료된 경우 필터명 뒤에 .FILTERED 라는 키워드가 작성
▶ 이후 요청이 내부에서 forward할때마다 검증이 수행되는 경우 해당 .FILTERED의 유무에 따라서 검증의 수행을 Skip
SecurityFilterChain :
。Spring Security에서 제공하는 보안 filter 모음 역할의 Interface.
( Authentication Filter , Authorization Filter , CORS Filter , CSRF Filter , ExceptionTranslation Filter 등)
。Web Security Configuration를 정의하는 @Configuration Class를 통해 Spring Bean으로 등록 시 Delegating Filter Proxy를 통해 Servlet Filter Chain 사이에서 Filter로서 의존성 주입되어 기능