기술(Tech)/Java & Spring
위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy
개발자가 될 사람
2023. 1. 28. 14:06
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy
DelegatingFilterProxy
- 스프링 시큐리티는 필터 기반으로 보안 처리를 진행한다.
- 필터는 스프링 기술을 사용해야 한다.
- 서블릿 필터는 스프링에서 정의된 빈을 주입해 사용할 수 없다.
- Servlet Filter는 서블릿 컨테이너에서 생성되고 실행된다.
- 스프링 빈은 스프링 컨테이너에서 서블릿 필터는 서블릿 컨테이너에서 관리되기 때문이다.
- 특정한 이름을 가진 스프링 빈을 찾아 그 빈에게 요청을 위임한다.
- springSecurityFilterChain 이름으로 생성된 빈을 ApplicationContext에서 찾아 요청을 위임한다.
- 실제 보안처리를 하지 않는다.
- 이때 DelegatingFilterProxy는 스프링 필터가 아닌 서블릿 필터이다.
- 서블릿 필터로부터 요청을 받아 스프링에서 관리하는 필터 빈에게 위임한다.
FilterChainProxy
- springSecurityFilterChain의 이름으로 생성되는 필터 빈
- DelegationFilterProxy으로 부터 요청을 위임 받고 실제 보안 처리
- 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어
- 스프링 시큐리티가 기본적으로 생성하는 필터
- 설정 클래스에서 API 추가 시 생성되는 필터
- Ex) UsernamePasswordAuthenticationFilter, DefaultLoginPageGenerationFilter, DefaultLogoutPageGenerationFilter는 Form 로그인 인증 방식 API를 추가하는 경우 생기는 필터이다.
- FilterChainProxy가 이러한 필터들을 관리하고 제어한다.
- 사용자의 요청을 필터 순서대로 호출하여 전달
- 사용자정의 필터를 생성해 기존의 필터 전,후로 추가 가능
- 필터의 순서를 잘 정의
- 마지막 필터까지 인증 및 인가 예외가 발생하지 않으면 보안 통과
DelegatingFilterProxy, FilterChainProxy 동작 흐름