Java/Spring Security

Spring Security Filter의 동작 흐름

마손리 2023. 5. 13. 00:42

Spring Security Filter를 알기 전에 웹요청의 처리 흐름에 대해 먼저 알아야 한다.

 

Servlet의 FilterChain

서블릿기반 어플리케이션의 경우, 클라이언트에서 웹요청이 들어오면 서블릿 컨테이너는 해당 요청을 DispetcherServlet으로 보내기 이전에 FilterChain을 생성한뒤 HttpServletRequest를 진행한다. 이때 FilterChain을 구성하는 요소들이 Filter이다.

 

이때 하나의 서블릿은 하나의 HttpServletRequestHttpServletResponse를 제어하며 이를 위해 여러 Filter들이 사용될 수 있다.

DispatcherServlet까지의 웹요청 흐름

 

DelegatingFilterProxy

Servlet filterServlet container 안에 존재하는 것과 달리 Spring security filterSpring container에서 Bean으로 존재하며 두 필터 체인들을 연결하기위해 DelegatingFilterProxy가 사용된다.

DelegatingFilterProxy

DelegatingFilterProxy는 두 필터 체인들을 연결시키는 작업 외에도, 해당 Bean filter가 완전히 로드될때까지 웹요청의 흐름을 기다려주는 역할도 수행한다.

 

 

FilterChainProxy

FilterChainProxySpring security filter 중 하나이며 SecurityFilterChain을 연결시켜준다. 즉, DelegatingFilterProxyServletFilterFilterChainProxy를 연결하고 FilterChainProxySecurityFilterChain을 연결하여 마침내 Servlet container에 속한 Servlet filter에서 Spring container에 속한 Security filter까지 연결이 된다. 

 

FilterChainProxy

 

SecurityFilterChain

SecurityFilterChain은 현재 클라이언트의 요청에 맞는 Security filter들을 호출해준다. 

 

Multiple SecurityFilterChain

그림과 같이 여러 SecurityFilterChain이 존재할 수 있으며 FilterChainProxy가 어떤 SecurityFilterChain을 사용할지 결정한다. 예를 들어 클라이언트에서 "/api/"에 대한 요청이 들어오면 FilterChainProxy첫번째 SecurityFilterChain을 호출하고 비로서 Spring Security의 주 목적인 보안에 관련된 작업을 수행한다.

 

SecurityFilterChain의 종류

 

 

 

출처 : https://docs.spring.io/spring-security/reference/servlet/architecture.html

 

 

'Java > Spring Security' 카테고리의 다른 글

JWT  (0) 2023.05.17
DelegatingPasswordEncoder  (0) 2023.05.15
SecurityFilterChain과 AuthenticationProvider 구현  (0) 2023.05.13
Spring Security의 인증 처리 흐름  (0) 2023.05.13
Servlet Filter 구현  (0) 2023.05.13