HTTP 요청 > WAS > 필터 > 서블릿 > 스프링 인터셉터 > 컨트롤러
HTTP 요청 > WAS > 서블릿 > 스프링 인터셉터 > 컨트롤러 // 로그인 사용자
HTTP 요청 > WAS > 서블릿 > 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 호출X) // 비 로그인 사용자
HTTP 요청 > WAS > 필터 > 서블릿 > 인터셉터1 > 인터셉터2 > 컨트롤러
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
서블릿 필터의 경우는 단순하게 doFilter() 하나만 제공이 된다. 인터셉터는 컨트롤러 호출 전에 preHandle() 호출 후 postHandle() 요청 완료 이후 afterCompletion와 같이 단계적으로 세분화가 잘 되어 있다.
서블릿 필터의 경우 단순히 request, response만 제공을 했지만 인터셉터는 어떤 컨트롤러(handler) 가 호출되는지 호출 정보도 받을 수 있다. 또한 어떤 modelAndView가 반환되는지 응답정보도 받을 수 있다.