프로그래밍/Spring

[Spring] Servlet/JSP Filter에 대해 알아보자

byungmin 2021. 12. 31. 10:50

Servlet Filter

Client에서 Server로 요청이 들어오기 전에 서블릿을 거쳐서 먼저 필터링 하는 것을 서블릿 필터라고 한다. 서블릿마다 공통된 로직을 처리하기위해서 Filter를 사용한다.

 

Filter 구조도 출처 : https://jun-itworld.tistory.com/28

공통적인 기능들을 서블릿이 호출되기 전에 수행(전처리)되게 하고 싶거나

서블릿이 호출 되고 난 뒤에 수행(후처리) 하고 싶으면 공통적인 기능들을 서블릿 필터로 구현하면 된다.

 

Filter Chain

필터가 한개 이상 있을 때를 Filter Chain이라고 한다.

Filter Chain 구조도 출처 : https://jun-itworld.tistory.com/28

Filter1의 전처리 -> Filter2의 전처리 -> Filter3의 전처리 -> 서블릿 호출 -> Filter3의 후처리 -> Filter2의 후처리 -> Filter1의 후처리 순으로 처리된다.

 

어떻게 쓰이나?

예제 - 수행시간 측정

// 필터를 적용할 요청의 패턴 지정 - 모든 요청에 필터를 적용.
@WebFilter("/*")
public class HttpFilter implements Filter { // Filter 인터페이스를 implements

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 초기화 작업
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 1. 전처리 작업
        long startTime = System.currentTimeMillis();

        // 2. 서블릿 또는 다음 필터를 호출
        chain.doFilter(request, response);

        // 3. 후처리 작업
        System.out.println("[" + ((HttpServletRequest) request).getRequestURI() + "]");
        System.out.println(" 소요시간 = " + (System.currentTimeMillis() - startTime + "ms"));
    }

    @Override
    public void destroy() {
        // 정리 작업
    }
}

전처리에서 현재시간을 저장하고 서블릿을 호출한 다음 후처리에서 현재시간 - 시작시간을 해서 소요시간을 설정한다.