Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

기록하자..

스프링 시큐리티 - DelegatingFilterProxy 본문

스프링 시큐리티

스프링 시큐리티 - DelegatingFilterProxy

P23Yong 2022. 9. 21. 23:17

이전에 스프링 시큐리티를 사용하면 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의 이름이다. (일단 알아만 놓자.)

이후 DelgatingFilterProxyRegistrationBeangetFilter 메서드가 실행이 되면서 DelegatingFilterProxy가 생성된다. 이 getFilter 메서드는 AbstractFilterRegistrationBean 추상 메서드이고, AbstractFilterRegistrationBeanServletContextIntializer 인터페이스를 구현하고 있다.

이는 서블릿 컨테이너에 DelgatingFilterProxyRegistrationBean의 getFilter 메서드가 만들어낸 필터를 등록하게 된다.

 

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

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

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

getDescription 메서드에서 getFilter 메서드가 호출되는 것을 확인할 수 있다.

그러면 이제 우리가 알다시피 DelegatingFilterProxyRegistrationBeanDelegatingFilterProxy을 생성해준다!

정리

스프링 시큐리티를 사용하면 DelegatingFilterProxy가 생성이 되는데,

DelegatingFilterProxy는 서블릿 컨테이너와 스프링 컨테이너의 다리 역할을 해주는 Filter 인터페이스의 구현체이다.

DelegatingFilterProxySecurityFilterAutoConfiguration을 통해 생성된 DelegatingFilterProxyRegistrationBean을 통해 생성이 된다.

참고자료

스프링 시큐리티 레퍼런스