Filter vs Interceptor

이 문서에서는 스프링 필터와 인터셉터의 공통점, 차이점, 특징에 대해 살펴본다.

공통점

인터셉터와 필터는 다음의 공통점을 가진다.

간섭 객체

필터와 인터셉터 모두 특정한 패턴의 URL에 대한 간섭을 수행할 수 있는 AOP 구현체들이다. 인터셉터에서 preHandle 메소드만 사용한다면 필터를 이용한 것과 유사한 효과가 발생한다.

차이점

간섭 시점

필터는 DispatcherServlet이 실행되기 전 상태의 요청을 간섭한다. 인터셉터는 DispatcherServlet이 실행 중 상태를 간섭한다.

따라서 인터셉터는 DispatcherServlet이 처리하지 않는 상태(404 not found)는 처리할 수 없다. 하지만 필터는 404 not found도 간섭이 가능하다.

용도 차이

필터의 경우 다음의 작업이 가능하다.

  • 요청, 응답 객체 교체

자주 쓰이는 작업은 아니지만 사용자가 보낸 요청을 기반으로 하여 새로운 요청을 만들어서 전송해야 할 경우 코드 구현이 가능하다.

filterChain.doFilter(request, response);

위의 코드가 필터의 속행(통과) 코드인데, 위의 requestresponse를 다른 값으로 변경할 수 있다.

하지만 인터셉터의 preHandle에서의 속행 코드는 다음과 같기 때문에 다른 값으로 변경할 수 없다.

return true;

Last updated