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

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

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() { // 정리 작업 } }

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

from http://byungmin.tistory.com/66 by ccl(A) rewrite - 2021-12-31 11:01:10