Spring/스프링 인터셉터

스프링 인터셉터 ①

수달하나 2022. 2. 28. 11:51

스프링 인터셉터:

서블릿 필터와 같이 웹과 관련된 공통사항을 처리하는 방법

(Spring MVC가 제공하는 기능이고 서블릿 필터보다 훨씬 더 많은 기능들을 제공한다)

 

 

스프링 인터셉터 기본 흐름

HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러

 

 

로그인 사용자일 경우

HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 

비 로그인 사용자

HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 호출 X)

 

 

 

스프링 인터셉터는 아래와 같이 3개로 구성이 된다.

public interface HandlerInterceptor {
	
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {} 
    
    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 {}

}

 

 

정상적인 동작을 하는 경우 Dispatcher Servlet 이 preHandler 를 호출한 이후 핸들러 어댑터를 통해 핸들러(컨트롤러) 를 호출하고 그 이후 postHandler를 호출한다. 이후에 render(model)를 호출하고 afterCompletion을 호출하게 된다.

만약 핸들러(컨트롤러)에서 예외가 발생하게 된다면 postHandler를 호출하지 않는다. 하지만 예외가 터지더라도 예외와 무관하게 공통 처리를 하기 위해서 afterCompletion은 호출이 된다.

 

서블릿 필터와 스프링 인터셉터는 매우 비슷한 기능을 가지고 있지만 특별히 서블릿 필터를 사용해야 할 이유가 없다면 스프링 인터셉터를 사용하는 것이 더 편리하다.