Spring에서 dispatcher-servlet과 interceptor의 연동과 동작원리에 대해 알아보았다.

클라이언트 요청흐름 이미지에서 확인해보면 Spring Container 내에서 HanlderMapping과 Handler Adapter 사이에서 동작을 하는것을 알 수 있다.
핸들러 인터셉터의 주 사용 목적은 핸들러의 수정 없이 핸들러 수행 전/후처리 동작을 추가하여 핸들러의 반복적인 코드를 제거하기 위함이다.
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 {
}
DispatcherServlet의 관점에서의 동작 순서
1. HandlerMapping 할당
2. HandlerAdapter 할당
3. preHandler
4. HandlerAdapter 수행
5. postHandler
6. View 렌더링
7. afterCompletion
이 중 Interceptor에서는 3, 5, 7 의 동작을 담당한다.
DispatcherServlet에서는 아래와 같은 코드를 통해 Interceptor들을 추가하고 관리가 가능하다.
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor1())
.addPathPatterns("/**")
registry.addInterceptor(interceptor2())
.addPathPatterns(Contro);
}