본문 바로가기
Web/Spring-Security

[Security] 시큐리티 파헤치기 (1) : DelegatingFilterProxy

by 희조당 2023. 8. 2.
728x90

🙋 들어가며

이전에 Spring Security를 너무 가볍게 공부한 것 같아서 A-Z로 다뤄보려고 합니다.

이번 편에서는 DelegatingFilterProxy에 대해서 이야기해 보겠습니다.


👩‍💼 DelegatingFilterProxy

Security에서 빼놓을 수 없는 객체입니다.

이름에서 역할이 잘 명시되어 있습니다. 이름 그대로 Filter를 위임(deleagte)하는 대리자(proxy)입니다.

🤷 왜 위임하나요?

전체적인 흐름을 이해하고 왜 위임하는지 알아보겠습니다.

먼저 클라이언트의 요청이 들어오면 서블릿 컨테이너는 필터 체인을 생성합니다.

이후 요청이 필터와 서블릿을 통과하면 스프링 내부로 진입하게 됩니다.

필터 체인 : HttpServletRequest를 처리하는 서블릿과 필터를 포함하는 하나의 단위

 

시큐리티는 서블릿의 필터를 기반으로 동작합니다. 다르게 말하면 필터는 서블릿 컨테이너가 관리합니다.

스프링의 IoC 컨테이너는 서블릿 컨테이너와 다르기 때문에 그 사이를 이어 줄 존재가 필요합니다.

그 존재가 바로 DelegatingFilterProxy입니다.

그림 1 : DI를 할 수 없는 필터

⏩️ 동작 원리

DelegatingFilterProxy는 이름으로 스프링 컨테이너에서 빈을 가져옵니다.

그림 2 : 초기화 시 필터이름으로 타겟을 등록한다.

DelegatingFilterProxy는 springSecurityFilterChain라는 타깃 이름을 가지고 초기화됩니다.

기본 3 : SecurityFilterAutoConfiguration에서 초기화되는 DelegatingFilterProxyRegistrationBean

따라서, 타겟 이름으로 조회했을 때 다음 빈을 가져옵니다.

그림 4 : springSecurityFilterChain Bean

이후 요청에 들어오면 springSecurityFilterChain에게 위임합니다.

단순하게 위임만 한다는 점이 중요합니다. 즉, 보안에 관련된 어떤 기능도 존재하지 않습니다.

🤔 필요한 이유

가장 중요한 이유는 앞서 언급한 스프링 IoC 컨테이너와 서블릿 컨테이너 사이의 징검다리 역할입니다.

그리고 프록시라는 이름에서 예상했듯이 실질적으로 필요한 순간에 사용할 수 있게 도와줍니다. (지연 검색)

 

공식 문서에서 제공되는 그림을 통해서 어떤 구조를 가지는지 한눈에 알아볼 수 있습니다. 😋

그림 5 : DelegatingFilterProxy와 SecurityFilterChain


😋 정리

  • DelegatingFilterProxy는 대리자이다.
  • 생성될 때 springSecurityFilterChain라는 빈을 불러온다.
  • 실제로 검증할 때는 가져온 빈에게 행동을 넘긴다.
  • 스프링과 서블릿의 중간다리 역할을 하며, 지연 검색을 가능하게 한다.

-Reference:

https://docs.spring.io/spring-security/site/docs/5.4.2/reference/html5/#servlet-delegatingfilterproxy

 

😋 지극히 개인적인 블로그지만 댓글과 조언은 제 성장에 도움이 됩니다 😋

댓글