filter
Dispatcher Servelt에 요청이 전달되기 전 후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것이다.
Filter Interface 구조
init(): 필터 객체를 초기화 하고 서비스에 추가, 이후 요청들은 doFilter를 통해 처리된다.
doFilter(): 모든 http 요청이 실행되는 메소드
destroy(): 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위한 메소드
public void init(FilterConfig filterConfig) throws ServletException;
public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException;
public void destroy();
Interceptor
Filter와 달리 Spring이 제공하는 기술로, Dispatcher Servlet이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.
Interceptor Interface 구조
preHandle(): 컨트롤러가 호출되기 전에 실행, 반환타입은 boolean인데 반환값이 true면 다음단계 진행, false라면 작업 중단
postHandle(): 컨트롤러가 호출된 후에 실행, 후처리 작업에 사용. RestAPI 기반의 컨트롤러(@RestController)를 만들면서 자주 사용되지는 않는다.
afterCompletion(): 모든 뷰에서 최종 결과를 생성하는 일을 포함해 모든 작업이 완료된 후에 실행된다.
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)