본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : 인터셉터 예외 처리

by 오주현 2022. 2. 25.
반응형

인터셉터의 중복 호출을 제거한다.

 

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    String requestURI = request.getRequestURI();

    String uuid = UUID.randomUUID().toString();
    request.setAttribute(LOG_ID, uuid);

    log.info("REQUEST [{}][{}][{}][{}]", uuid, request.getDispatcherType(), requestURI, handler);
    return true;
}

필터는 DispatcherType인 경우 필터를 적용할 지 선택할 수 있었지만 인터셉터는 스프링이 제공하는 기술이라 무관하게 호출된다.

 

@Override
 public void addInterceptors(InterceptorRegistry registry) {
	 registry.addInterceptor(new LogInterceptor())
		 .order(1)
		 .addPathPatterns("/**")
		 .excludePathPatterns(
		 "/css/**", "/*.ico", "/error", "/error-page/**"
		 );
 }

/error-page/**을 제거하면 내부 호출도 인터셉터가 호출되게 된다.

 

강의에서 흐름을 잘 설명해 주었는데 아래와 같다.

  1. WAS(/error-ex, dispatchType=REQUEST) -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러
  2. WAS(여기까지 전파) <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러(예외발생)
  3. WAS 오류 페이지 확인
  4. WAS(/error-page/500, dispatchType=ERROR) -> 필터(x) -> 서블릿 -> 인터셉터(x) -> 컨트롤러(/error-page/500) -> View

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글