[ODOP] 81일차 - DelegatingFilterProxy, FilterChainProxy
![[ODOP] 81일차 - DelegatingFilterProxy, FilterChainProxy](/content/images/size/w1200/2023/08/-----2023-08-01----10.29.26-15.png)
DelegatingFilterProxy
- ServletFilter
-
서블릿 스펙 2.3 버전 부터 지원되는 기능
-
서블릿 컨테이너에서 생성되며 실행
따라서 Spring Container 에서 생성되는 Bean 을 Injection 하는 방식으로는 사용할 수 없다
-
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----3.46.42.png)
하지만 지난 방식에서는 사용자의 처리를 Filter 기반으로 처리했다 (여기서 말하는 Filter 는 Servlet Filter)
Spring Security 는 개발자의 "Filter 에서 Spring Bean 을 사용하고자 하는" 요구사항을 해결하기 위하여 아래와 같은 프로세스를 거치게 된다.
- ServletFilter 에서 사용자의 Stream 이 들어온다
- ServletFilter 에서 DelegatingFilterProxy 를 동작
- DelegatingFilterProxy 는 GenericFilterBean 이라는 추상 클래스를 구현한 구현체
- GenericFilterBean 은 ServletFilter 를 상속받고 있다
- GenericFilterBean 은 ServletFilter 이지만 WepApplicationContext 를 가지고 있기 때문에 Spring Bean 을 사용할 수 있다
(interface WebApplicationContext extends ApplicationContext)
- 특정한 이름을 가진 스프링 빈을 찾아 그 빈에게 요청을 위임한다
- springSecurityFilterChain 이름으로 생성된 빈을 ApplicationContext 에서 찾아 요청을 위임한다
- DelegatingFilterProxy 는 실제 보안 처리를 하지 않는다
FilterChainProxy
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----3.48.09.png)
- springSecurityFilterChain 의 이름으로 생성되는 필터 빈
- DelegatingFilterProxy 로 부터 요청을 위임 받고 실제 보안처리를 수행
- 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어
- 스프링 시큐리티가 기본적으로 생성하는 필터
- 설정 클래스에서 API 추가 시 생성되는 필터
- 사용자의 요청을 필터 순서대로 호출하여 전달
- 사용자정의 필터를 생성해서 기존의 필터 전.후로 추가 가능
- 필터의 순서를 잘 정의
- 마지막 필터까지 인증 및 인가 예외가 발생하지 않으면 보안 통과
전체적인 흐름
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----3.48.49.png)
Servlet Container 는 각각의 Filter 들이 먼저 돌고 Spring Container 로 넘어가게 된다