기술(Tech)/Java & Spring

위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy

개발자가 될 사람 2023. 1. 28. 14:06
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.

 

 

위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy

 

DelegatingFilterProxy


  • 스프링 시큐리티는 필터 기반으로 보안 처리를 진행한다.
    • 필터는 스프링 기술을 사용해야 한다.

 

 

  1. 서블릿 필터는 스프링에서 정의된 빈을 주입해 사용할 수 없다.
    • Servlet Filter는 서블릿 컨테이너에서 생성되고 실행된다.
    • 스프링 빈은 스프링 컨테이너에서 서블릿 필터는 서블릿 컨테이너에서 관리되기 때문이다.
  2. 특정한 이름을 가진 스프링 빈을 찾아 그 빈에게 요청을 위임한다.
    • springSecurityFilterChain 이름으로 생성된 빈을 ApplicationContext에서 찾아 요청을 위임한다.
    • 실제 보안처리를 하지 않는다.
    • 이때 DelegatingFilterProxy는 스프링 필터가 아닌 서블릿 필터이다.
      • 서블릿 필터로부터 요청을 받아 스프링에서 관리하는 필터 빈에게 위임한다.

 

 

FilterChainProxy


  1. springSecurityFilterChain의 이름으로 생성되는 필터 빈
  2. DelegationFilterProxy으로 부터 요청을 위임 받고 실제 보안 처리
  3. 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어
    • 스프링 시큐리티가 기본적으로 생성하는 필터
    • 설정 클래스에서 API 추가 시 생성되는 필터
      • Ex) UsernamePasswordAuthenticationFilter, DefaultLoginPageGenerationFilter, DefaultLogoutPageGenerationFilter는 Form 로그인 인증 방식 API를 추가하는 경우 생기는 필터이다.
    • FilterChainProxy가 이러한 필터들을 관리하고 제어한다.
  4. 사용자의 요청을 필터 순서대로 호출하여 전달
  5. 사용자정의 필터를 생성해 기존의 필터 전,후로 추가 가능
    • 필터의 순서를 잘 정의
  6. 마지막 필터까지 인증 및 인가 예외가 발생하지 않으면 보안 통과

 

 

DelegatingFilterProxy, FilterChainProxy 동작 흐름