스프링 시큐리티

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 위임 필터 및 필터 빈 초기화(DelegatingProxyChain, FilterChainProxy)

webmaster 2022. 1. 16. 11:06
728x90

  • 서블릿 필터는 스프링에서 정의된 빈을 주입해서 사용할 수 없음
    • 스프링 시큐리티는 모든 요청에 대하여  Filter기반으로 처리한다.
    • DelegationFilterProxy를 사용하여 Spring Bean에 요청을 위임한다.
  • 특정한 이름을 가진 스프링 빈을 찾아 그 빈에게 요청을 위임
    • springSecurityFilterChain 이름으로 생성된 빈을 ApplicationContext에서찾아 요청을 위임
    • 실제 보안 처리를하지 않음

스프링 시큐리티가 초기화시 생성되는 필터

  • springSecurityFilterChain의 이름으로 생성되는 필터 빈
  •  
    DelegatingFilterProxy으로부터 요청을 위임받고 실제 보안 처리
  • 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어
    • 스프링 시큐리티가 기본적으로 생성하는 필터
    • 설정 클래스에서 API 추가 시 생성되는 필터
  • 사용자의 요청을 필터 순서대로 호출하여 전달
  • 사용자 정의 필터를 생성해서 기존의 필터 전. 후로 추가 가능
    • 필터의 순서를 잘 정의
  • 마지막 필터까지 인증 및 인가 예외가 발생하지 않으면 보안 통과

동작관리

  1. 사용자의 요청이 들어오면 서블릿 컨테이너에서 필터를 처리하게 된다.
  2. 이때 DelegatingFilterProxy가 이를 스프링 컨테이너에 있는 FilterChainProxy에 요청을 위임한다.
  3. FilterChainProxy에서는 해당 Proxy를 이미 springSecurityFilterChain이라는 이름을 빈으로 등록을 하였기에 해당 빈이 순차적으로 필터를 호출하여 준다.
  4. 각각의 순서대로 필터를 호출하면서 인가, 인증 작업을 진행한다.
  5. 모든 작업이 끝나게 되면, DispatcherServlet에 요청을 위임한다.

  • FilterChainProxy에 doFilter에서 해당 메서드를 호출하면서 Filter들을 인증, 인가 처리를 해준다,
728x90