개요
이 글은 Spring Security 6.4.3을 기반으로 작성되었습니다.
스프링 시큐리티의 Servlet 지원은 Servlet 필터(Filter) 위에서 동작합니다.
따라서 필터가 뭔지 아는 것이 먼저입니다.
위의 이미지는 하나의 HTTP request에 대해서 어떻게 처리하는 지 보여줍니다.
만약 클라이언트(Clinet)가 request를 하나 보내면, container에서는 FilterChain을 생성합니다.
이 FilterChain에는 여러 개의 Filter들과 하나의 Servlet이 포함되어 있습니다.
Spring MVC 어플리케이션에서는 주로 DispatcherServlet의 객체가 Servlet이 됩니다.
이 그림에서 중요한 건 두 가지입니다.
첫째, 대부분의 경우 1개의 Servlet이 1개의 HttpServletRequest를 다루지만, Filter는 여러 개가 가능합니다.
둘째, Filter는 아래로 흐릅니다. 즉, 한 request는 여러 Filter들을 거쳐 작동됩니다.
그러므로, 순서는 매우 중요합니다.
하나의 request에 대해서 Filter는 일종의 관문 역할을 하며,
Client와 Servlet 사이에서 전처리 역할을 담당한다고 보시면 될 것 같습니다.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
// do something before the rest of the application
chain.doFilter(request, response); // invoke the rest of the application
// do something after the rest of the application
}
위의 코드는 FilterChain의 사용 예시입니다.
doFilter 메서드는 doFilter를 다시 호출해 다음 필터로 넘기고, 나머지 로직이 호출되도록 합니다.
다음 포스트에서는 FilterChain의 내부 로직 중 하나인
DelegatingFilterProxy와 FilterChainProxy에 대해 다뤄보겠습니다.
Reference
https://docs.spring.io/spring-security/reference/servlet/architecture.html
'Spring Framework > SpringSecurity' 카테고리의 다른 글
[Spring Security] SecurityFilterChain (0) | 2025.02.26 |
---|---|
[Spring Security] DelegatingFilterProxy와 FilterChainProxy (0) | 2025.02.26 |