Spring Security - DelegateFilterProxy

목차

Filter 란

  • 기본적으로 Filter 는 Servlet Filter 를 의미한다.
  • Servlet Filter 는 서블릿 스펙에 정의된 기술
    • 서블릿 컨테이너에서 생성되고 실행된다.
    • Filter 는 Spring 에서 생성한 Bean 을 사용하거나 Spring 기술을 사용할 수 없다.
  • Filter 를 사용해 자원에 대한 접근 전/후에 대한 처리를 진행할 수 있다.

DelegatingFilterProxy

Servlet Container 와 Spring Container 사이에 다리 역할을 해 Spring Bean 으로 등록된 Filter 를 찾아 요청을 위임하는 역할을 한다.

  • Servlet Container 위에 구현된 Filter
  • Servelt Filter 가 요청을 DelegatingFilterProxy 로 전달
  • DelegatingFilterProxy 는 들어온 요청을 Spring Container 위에 생성된 Filter Bean 에 요청을 위임
    • springSecurityFilterChain 이름으로 생성된 Bean 을 찾아 요청을 위임한다.

DelegatingFilterProxy

FilterChainProxy

  • springSeuciryFilterChain 이름으로 생성되는 Filter Bean
  • DelegatingFilterProxy 로부터 요청을 위임 받고 실제로 보안 처리를 진행한다.
  • Filter 를 관리하고 제어하며 호출 돼 실제로 보안 처리를 진행한다.
    • Spirng Security 가 기본적으로 생성하는 Filter
    • 설정 클래스(Config) 클래스에서 추가시 생성되는 Filter
  • 사용자 요청을 필터 순서대로 호출하여 그 다음 Filter 로 전달한다.
  • 마지막 Filter 까지 진행이 되면 Servlet 에 접근할 수 있다.

DelegatingFilterProxy 처리 과정

  • 사용자가 요청을 하게 되면 Servlet 에 존재하는 Filter 가 가장 먼저 받게 된다.
  • DelegatingFilterProxy 가 사용자 요청을 받게 되면 요청 객체를 FilterChainProxy 에 위임한다.
  • FilterChainProxy 는 요청에 대해 Filter 별로 호출을 해 보안 처리를 진행
  • 인증/인가가 완료된 후 요청을 DispatcherServlet 에 넘긴다.

SecurityFilterAutoConfiguration

  • securityFilterChainRegistration 을 springSecurityFilterChain 이름으로 Spring 에 등록한다.
  • DelegatingFilterProxyRegistrationBean 을 생성하게 될 경우 DelegatingFilterProxy 생성자가 실행된다.

SecurityFilterAutoConfiguration

DelegatingFilterProxy

  • DelegatingFilterProxy 생성자는 요청을 위임할 Bean 이름을 springSecurityFilterChain 를 설정한다.

DelegatingFilterProxy

WebSecurityConfiguration

  • springSeuciryFilterChain 이름을 가진 Bean 을 생성한다.
  • webSecurity.build 메서드를 실행할 경우 WebSecurity 객체의 performBuild 메서드가 실행된다.

WebSecurity

  • FilterChainProxy 객체를 생성한다.

사용자 요청이 들어왔을 때

DelegationFilterProxy

  • DelegationFilterProxy 에서 요청을 받고 요청을 위임할 Filter (springSecurityFilterChain) 을 찾아 요청을 위임한다.

FilterChainProxy

  • getFilters 메서드를 통해 Spring Security 가 초기화 되면서 생성되는 Filter 목록들을 가져와
  • VirtualFilterChain 객체를 생성해 Filter 를 전달하면 순서대로 Filter 를 실행시킨다.

Share