스터디-Spring

[스프링 시큐리티] DelegatingFilterProxy와 FilterChainProxy

일태우 2022. 1. 13. 19:08

https://docs.spring.io/spring-security/reference/servlet/architecture.html

 

Architecture :: Spring Security

Spring Security’s Servlet support is based on Servlet Filters, so it is helpful to look at the role of Filters generally first. The picture below shows the typical layering of the handlers for a single HTTP request. The client sends a request to the appl

docs.spring.io

 

서블릿에는 Filter가 존재함, 특정 요청의 앞 뒤로 다른 일을 처리하는 인터셉터 같은 것

하지만 서블릿 컨테이너는 스프링에 등록된 빈을 인식하지 못한다

 

DelegatingFilterProxy

  • 일반적인 서블릿 필터
  • 서블릿 필터 처리를 스프링에 있는 빈으로 위임하고 싶을 때 사용하는 서블릿 필터
  • 스프링 부트가 아니면 AbstractSecurityWebApplicationInitializer를 사용하여 등록
  • 스프링 부트에서는 SecurityFilterAutoConfiguration으로 자동 등록된다

DelegatingFilterProxy Pseudo Code

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
	// Lazily get Filter that was registered as a Spring Bean
	// For the example in DelegatingFilterProxy 
delegate
 is an instance of Bean Filter0
	Filter delegate = getFilterBean(someBeanName);
	// delegate work to the Spring Bean
	delegate.doFilter(request, response);
}

BeanName으로 ApplicationContext에서 Bean을 찾아서 요청을 위임한다.

 

 

FilterChainProxy

  • 보통 springSecurityFilterChain이라는 이름의 빈으로 등록된다.