스프링 Interceptor의 등록과 동작 과정

불냥·2024년 8월 12일
post-thumbnail

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

Handler 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 {
	}
  • preHandle - 동작 이전에 수행할 동작
  • postHandle - 동작 이후에 처리할 동작 (화면 처리하기 전 동작)
  • afterCompletion - Dispatcher Servlet의 화면 처리가 완료된 이후 처리할 동작

Spring Interceptor의 동작 위치

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);
	}
profile
개인 공부 및 프로젝트 중 발생한 오류에 대한 정리를 위한 블로그입니다.

0개의 댓글