Spring
[Spring] Servlet Filter 란?
worldcenter
2024. 11. 10. 18:39
Servlet Filter 란?
- Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며, 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있습니다.
- 주로 범용적으로 처리해야 하는 작업들, 예를 들어 로깅 및 보안 처리에 활용합니다.
- 또한 인증, 인가와 관련된 로직들을 처리할 수도 있습니다.
- Filter를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 있습니다.
- Spring의 경우 Spring Interceptor, AOP 기능을 이용하면 필터 역할을 대체할 수 있습니다.
- 클라이언트 -> WAS -> Filter -> DispatcherServlet -> Controller
Servlet Filter 로 가능한 작업
- 로깅 및 감사 기능
- 응용 프로그램의 실행 시각 측정 가능
- 인증 여부 확인 기능
- 복호화 및 암호화 기능
- 문자셋 변환 기능
Servlet Filter Lifecycle
- Filter가 되기 위해서는 Javax.servlet.Filter 인터페이스를 구현해야 함
- 웹 응용프로그램이 처음 실행될 때 개체가 생성되고 init() 실행
- 클라이언트 요청이 있을 때마다 doFilter() 실행
- 웹 응용프로그램이 종료될 때 destory() 실행
브라우저 | 필터 객체 | 서블릿 JSP |
init(config) {...} | ||
doFilter() { // 전처리 chain.doFilter(...) // 후처리 } |
||
destroy() {...} |
public interface Filter {
default void init(FilterConfig filterConfig) throws ServletException {
}
void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
default void destroy() {
}
}
// Custom Filter 생성
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
.
.
.
}
Servlet Filter 동작 과정
1. Filter(인터페이스)
- 정의 : javax.servlet.Filter 는 서블릿 API에서 제공하는 필터 인터페이스
- 역할 : 요청과 응답을 가로채거나 처리하기 위해 개발자가 구현하는 인터페이스
- 동작 :
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain): 필터링 로직을 구현
2. FilterChain(인터페이스)
- 정의 : javax.servlet.FilterChain은 서블릿 API에서 제공하는 필터 체인 인터페이스
- 역할 : 각 Filter가 호출될 때, 현재 필터가 다음 필터로 요청을 전달할 수 있도록 하는 연결 역할
- 동작 :
- Filter 구현체의 doFilter 메소드에서 chain.doFilter(request, response) 를 호출하여 다음 필터 또는 최종 서블릿으로 요청을 전달
- 실제로는 ApplicationFilterChain과 같은 구현체가 FilterChain 인터페이스를 구현하여 필터를 연결
3. ApplicationFilterChain(구현체 클래스)
- 정의 : org.apache.catalina.core.ApplicationFilterChain 은 Tomcat에서 제공하는 FilterChain의 구현체
- 역할 : 필터 체인 내부에서 필터를 순서대로 관리하고 호출하는 클래스 입니다. Tomcat이 요청이 들어올 때 이 클래스의 인스턴스를 생성하고, 등록된 필터들을 체인 형태로 연결하여 실행합니다.
- 동작 :
- doFilter 메소드를 통해 체인의 각 필터를 순서대로 호출하고, 마지막에 도달하면 최종 서블릿이 실행
- ApplicationFilterChain은 Tomcat의 내부 동작에 속하므로, 개발자는 직접 이를 사용할 필요가 없음
Servlet Filter 동작 과정을 정리하면 개발자는 Filter만 구현하면 되며, FilterChain은 내부적으로 ApplicationFilterChain이 관리해 줍니다.