DelegatingFilterProxy
-
Filter는 Servlet 2.3 이상부터 적용된 기술이다.
-
Spring 에서 필터가 동작한다는 것은 SpringContext 안에 Filter들이 있다는 뜻이된다.
-
하지만 Filter 는 ServletContext에 존재해 영역이 다르다.
-
결국 Filter는 스프링 기술이나 Bean을 Injection 받을 수 없다.
이렇게 각자 영역이 다른 상태에서 Servlet Spec 에서 사용되는 Filter를 사용할 수 있게끔 하는 것이 DelegatingFilterProxy 이다.
DelegatingFilterProxy 의 작동원리
-
SpringBean 이 Filter를 상속한다. 이는 Filter Type Bean을 의미한다.
-
DelegatingFilterProxy 는 Servlet Spec 의 Filter를 구현하고 있다.
-
DelegatingFilterProxy 는 Servlet Filter 이며, DelegatingFilterProxy 가 특정한 이름을 가진 Spring Filter Type Bean을 찾아 요청을 위임한다.
-
springSecurityFilterChain 이름으로 생성 된 빈을 ApplicationContext 에서 찾아 위임 한다.
-
실제 보안처리는 하지않는다.
springSecurityFilterChain의 이름을 가진 Bean은 FilterChainProxy
FilterChainProxy
-
springSecurityFilterChain 의 id를 가진다.
-
DelegatingFilterProxy에게 Request을 위임 받아 실제 보안처리를 실시
-
SpringSecurity 초기화 시에 생성되는 Filter Type Bean들을 관리, 제어
-
SpringSecurity 가 기본적으로 생성하는 Filter
-
WebSecurityConfigurerAdapter 상속 클래스에서 API 추가시 생성되는 Filter
-
필터가 작동하고나면 다시 FilterChainProxy 를 거쳐 다음 Filter로 Chain 된다.
4. 사용자의 Request 를 Filter 순으로 호출하여 전달 함
5. 사용자 정의 Filter를 생성하여 기존 필터의 전 , 후에 추가 가능하다.
-
각각의 Filter 는 고유한 역할과 순서가 있기 때문에 의 Chain에 맞게 추가해야함
6. 마지막 필터까지 인증 , 인가 예외가 발생하지 않는다면 보안에 통과 하고, Servlet 자원에 접근한다.
Container 관점의 DelegatingFilterProxy, FilterChainProxy
-
사용자의 Request
-
Servlet Filter 중 DelegatingFilterProxy 가 작동, DelegatingFilterProxy의 id는 springSecurityFilterChain 으로 내부적으로 탐색하는 FilterChainProxy 의 id와 같음
-
DelegatingFilterProxy 는 springSecurityFilterChain id를 가진 FilterChainProxy 에게 Request 를 Delegate
-
FilterChainProxy의 Filter Type Bean들이 동작하며 보안검사를 실행
-
모든 필터를 거쳐내려가 FilterSecurityInterceptor에서 AuthenticationException 이나 AccessDeniedException 이 발생하지 않았다면 Request를 Servlet 에 전달
-
SpringMVC 의 DispatcherServlet 이 요청을 받아 Servlet 자원에 접근
** SpringContext 에서 springSecurityFilterChain 이라는 id로 Bean 을 생성하는 객체는 WebSecurityConfiguration 클래스이다.
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
16.Authentication (0) | 2020.09.21 |
---|---|
15.필터 초기화와 다중 보안 설정 (0) | 2020.09.21 |
13. 사이트 간 요청위조 : CSRF, CsrfFilter (0) | 2020.09.21 |
12.ExceptionTranslationFilter, RequestCacheAwareFilter (0) | 2020.09.21 |
11. 권한 설정과 표현식 (0) | 2020.09.21 |