티스토리 뷰

1. 제공하는 주체가 다름

  • 필터는 JavaEE에서 제공하는 클래스이고 (서블릿 스펙, 2.3부터 추가됨)
  • 인터셉터의 경우 스프링에서 제공하는 클래스 (빈으로 등록해서 사용 가능) 

 

2. 적용 시점이 다름

서블릿 컨테이너에서 요청을 받은 경우 (DispatcherServlet이 받기전에) 먼저 filter를 타고, 그 후에 DispatcherServlet이 그 요청을 받아서 매핑되는 handler에게 요청을 전달하기 전에 interceptor가 intercept함.

 

3. 작동 방식이 다름

public interface Filter {
  void doFilter(ServletRequest request, ServletResponse response, FilterChain chain);
}

필터는 체인구조로 연달아서 적용됨. (web.xml에 등록한 순서에 따라)

 

public interface HandlerInterceptor {
  boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler);
  void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav);
  void afterCompletion(HttpServletRequest request, HttpServeletResponse response, Object handler, Exception ex);
}

인터셉터는 총 3개의 추상 메서드를 제공하며, 모두 해당 매핑되는 handler의 정보도 같이 넘겨주므로, 추가적인 처리 가능. 

특히 postHandle의 경우 ModelAndView도 파라미터로 받으므로, model에 값을 추가하거나 변경하는 등의 처리가 가능하고, view도 다른 뷰로 렌더링되도록 변경할 수 있음.

 

 

[참고]

supawer0728.github.io/2018/04/04/spring-filter-interceptor/

www.mkjava.com/tutorial/filter-vs-interceptor/

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함