Filter와 Interceptor은 모두 Servlet 전후 처리를 담당한다.
Filter
- J2EE 표준 스펙 기능
- javax.servlet의 Filter 인터페이스를 구현
- DispatcherServlet에 요청이 도달하기 전에 실행
- Spring context가 아닌 Web Application(톰캣아저씨)에 등록
- ServletRequest/ServletResponse에 직접 접근이 가능함
- doFilter 메서드를 통해 호출
- 로깅이나 인증 등에서 많이 사용
Interceptor
- Spring이 제공하는 기술로 Spring context에 등록(@Component)
- org.springframework.web.servlet의 HandlerInterceptor 인터페이스를 구현
- Spring 내부의 예외처리에 접근할 수 있음
- 인증 단계를 처리
차이점
- 객체 관리: Filter은 Web Application(톰캣아저씨)에 등록, Interceptor은 Spring context에 등록(@Component)에 등록 됨
- 실행 시점: DispatcherServlet이 실행 되기 전/후로 나뉨
- 따라서 요청이 들어올 때, Spring과의 연관성을 생각하여 적절한 것을 선택할 수 있어야함
추가 질문: DispatcherServlet?
클라이언트에서 받은 요청을 적절한 Controller을 찾아 위임하는 역할로 FrontController이라고도 함
참고 자료