기록하자..
스프링 시큐리티 - DelegatingFilterProxy 본문
이전에 스프링 시큐리티를 사용하면 FilterChain에서 DelegatingFilterProxy가 등록이 되는 것을 확인할 수 있었는데, 이게 무엇인지 알아보자.
(혹시 Filter에 대해 모르면 해당 글을 보고 오면 좋습니다.ㅎㅎ;)
https://coding-by-c.tistory.com/44
스프링 시큐리티 - Filter
스프링 시큐리티에 대해 학습한 것을 기록하고 싶었는데, Filter부터 정리하고 싶어 먼저 Filter에 대한 정리를 하고자 한다. Filter 스프링 시큐리티를 시작하기 전에, 필터에 대해 먼저 알아야 한다
coding-by-c.tistory.com
DelegatingFilterProxy
스프링은 Filter 인터페이스 구현체인 DelegatingFilterProxy를 제공해준다.
이 DelegatingFilterProxy는 스프링 컨테이너와 서블릿 컨테이너의 라이프 사이클과의 다리 역할을 해준다.
이는 두 컨테이너가 다르기 때문인데, 서블릿 컨테이너의 필터들은 스프링에서 정의된 빈을 알지 못한다. (빈을 주입받지 못한다.) DelegatingFilterProxy는 서블릿 컨테이너의 필터 체인에 등록되어 사용될 수 있으나 모든 요청을 Filter 인터페이스를 구현하고 있는 빈들에게 위임한다.


위 그림은 DelegatingFilterProxy가 서블릿 필터체인 사이에 등록되어 있는 그림이다.
위 그림처럼 DelegatingFilterProxy는 클라이언트로부터 오는 request를 받아 스프링 컨테이너에 등록되어 있는 Filter 인터페이스를 구현한 빈에게 처리를 위임해준다.
그러면 이 DelegatingFilterProxy는 어디서 생성되는 것인지 알아보자.


SecurityFilterAutoConfiguration에서 DelgatingFilterProxyRegistrationBean 빈을 등록해준다.


그러면 DelgatingFilterProxyRegistrationBean에서 targetBeanName을 springSecurityFilterChain으로 등록시켜주는데, FilterChainProxy의 이름이다. (일단 알아만 놓자.)
이후 DelgatingFilterProxyRegistrationBean의 getFilter 메서드가 실행이 되면서 DelegatingFilterProxy가 생성된다. 이 getFilter 메서드는 AbstractFilterRegistrationBean 추상 메서드이고, AbstractFilterRegistrationBean는 ServletContextIntializer 인터페이스를 구현하고 있다.
이는 서블릿 컨테이너에 DelgatingFilterProxyRegistrationBean의 getFilter 메서드가 만들어낸 필터를 등록하게 된다.


콜 스택을 그대로 따라가 보면,


ServletIntializer의 onStartup 메서드가 호출되고,


RegistrationBean의 getDescription 메서드가 호출되고,


getDescription 메서드에서 getFilter 메서드가 호출되는 것을 확인할 수 있다.
그러면 이제 우리가 알다시피 DelegatingFilterProxyRegistrationBean이 DelegatingFilterProxy을 생성해준다!
정리
스프링 시큐리티를 사용하면 DelegatingFilterProxy가 생성이 되는데, DelegatingFilterProxy는 서블릿 컨테이너와 스프링 컨테이너의 다리 역할을 해주는 Filter 인터페이스의 구현체이다. DelegatingFilterProxy는 SecurityFilterAutoConfiguration을 통해 생성된 DelegatingFilterProxyRegistrationBean을 통해 생성이 된다.
참고자료
'스프링 시큐리티' 카테고리의 다른 글
| 스프링 시큐리티 - Servlet Authentication Architecture (0) | 2022.11.08 |
|---|---|
| 스프링 시큐리티 - FilterChainProxy (+SecurityFilterChain) (0) | 2022.09.25 |
| 스프링 시큐리티 - Filter (0) | 2022.09.19 |