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이 관리해 줍니다.