DelegatingFilterProxy 란?
서블릿 필터 클래스이다.
서블릿 컨테이너(Tomcat)에 필터로 등록되지만 내부적으로는 Spring Bean 이름으로 실제 Filter를 찾아서
위임(delegate) 한다.
즉, 서블릿 필터처럼 동작하지만 진짜 필터 로직은 Spring Context 내에 있는 Bean 이 처리한다.
⚙️ 동작 구조 요약
[서블릿 컨테이너의 Filter Chain]
↓
DelegatingFilterProxy (서블릿 필터, Spring이 자동 등록)
↓ (Bean 이름 기반으로 찾아서 위임)
springSecurityFilterChain (Spring Security의 실제 필터 체인 Bean)
↓
security Filter들 (UsernamePasswordAuthenticationFilter, etc.)
✅ DelegatingFilterProxy 자체는 Bean인가?
- DelegatingFilterProxy 는 Spring 자체가 관리하는 Bean 이자 Filter이기도 하다
- Spring Boot 환경에서는 이 필터가 자동 등록된다.
- 실제로는 다음과 같은 방식으로 Bean 등록과 연결이 자동 처리된다.
@Bean
public FilterRegistrationBean<DelegatingFilterProxy> securityFilterChain() {
FilterRegistrationBean<DelegatingFilterProxy> registration = new FilterRegistrationBean<>();
registration.setFilter(new DelegatingFilterProxy("springSecurityFilterChain")); // ← 이 이름의 Bean을 찾음
registration.addUrlPatterns("/*");
return registration;
}
하지만 Spring Boot 3에서는 springSecurityFilterChain 이라는 Bean 을 자동으로 생성하고 이걸 DelegatingFilterProxy 가
위임하는 방식이므로 위 코드는 명시적으로 적지 않아도 동작한다.
🔑 요약
항목 |
설명 |
DelegatingFilterProxy |
서블릿 컨테이너에 등록되는 필터 (Spring이 자동 등록) |
Spring Bean 여부 |
✅ 맞습니다. Spring Bean입니다. |
실제 보안 로직 처리 |
내부적으로 springSecurityFilterChain이라는 Spring Security Filter Chain Bean에 위임 |
Spring Boot 3 버전에서의 DelegatingFilterProxy
🔍 등록 흐름
- Spring Security 는 FilterChainProxy Bean(springSecurityFilterChain) 을 생성한다.
=> Spring Security 등록을 위한 SpringFilterChain Bean 이다.
- Spring Boot 는 springSecurityFilterChain 이름의 Bean 이 있으면 자동으로 DelegatingFilterProxy 를 만들어 서블릿 필터로 등록한다.
- 내부적으로는 DelegatingFilterProxyRegistrationBean 을 사용해서 등록한다.
🔧 핵심 소스 흐름
1. ✅ springSecurityFilterChain Bean 생성
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests().anyRequest().authenticated();
return http.build(); // 이 내부적으로 FilterChainProxy 를 생성함
}
}
이 설정을 통해 springSecurityFilterChain 이라는 이름의 Bean 이 자동으로 등록된다.
2. ✅ Spring Boot에서 DelegatingFilterProxy 자동 등록
springSecurityFilterChain 이라는 이름의 Bean 이 있으면, Spring Boot 는 자동으로
DelegatingFilterProxyRegistrationBean 을 생성한다.
클래스 위치
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration
필터 등록 소스
@Bean
@ConditionalOnBean(name = DEFAULT_FILTER_NAME) // DEFAULT_FILTER_NAME = "springSecurityFilterChain"
public DelegatingFilterProxyRegistrationBean securityFilterChainRegistration(
SecurityProperties securityProperties) {
DelegatingFilterProxyRegistrationBean registration = new DelegatingFilterProxyRegistrationBean(
DEFAULT_FILTER_NAME);
registration.setOrder(securityProperties.getFilter().getOrder());
return registration;
}
3. ✅ DelegatingFilterProxyRegistrationBean 내부
해당 클래스는 FilterRegistrationBean<DelegatingFilterProxy> 를 확장한 클래스이다.
public class DelegatingFilterProxyRegistrationBean extends AbstractFilterRegistrationBean<DelegatingFilterProxy>
implements ApplicationContextAware {
public DelegatingFilterProxyRegistrationBean(String targetBeanName,
ServletRegistrationBean<?>... servletRegistrationBeans) {
super(servletRegistrationBeans);
Assert.hasLength(targetBeanName, "'targetBeanName' must not be empty");
this.targetBeanName = targetBeanName;
setName(targetBeanName);
}
}
여기서 DelegatingFilterProxyRegistrationBean 을 통해 springSecurityFilterChain 이라는 Bean 을
필터 등록하여 Spring Security 의 FilterChain 이 동작한다.
✅ 결론 정리
항목 |
설명 |
DelegatingFilterProxy |
Spring Boot에서 자동으로 서블릿 필터로 등록됨 |
등록 위치 |
SecurityFilterAutoConfiguration 클래스 |
조건 |
springSecurityFilterChain 이름의 Bean이 있을 경우 |
연결 대상 |
FilterChainProxy Bean (Spring Security 내부 보안 필터 체인) |