Search
Duplicate
🖊️

Interceptor

개요

인터셉터는 스프링이 제공하고 있는 기술로 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 인터셉터를 이용할 수 있다.
인터셉터는 요청과 응답을 가로채서 원하는 동작을 추가하고자 할 때 사용될 수 있다.

HandlerInterceptor

preHandle(), postHandle(), afterCompletion() 세 가지 메소드를 가지고 있다.
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 {} }
Java
복사
preHandle()
지정된 컨트롤러 호출 전에 실행되며 Object handler 매개변수는 현재 실행하려는 HandlerMethod 정보를 받게된다.
이를 활용하면 현재 실행되는 컨트롤러를 파악하거나 추가적인 메소드를 실행하는 등의 작업이 가능하다.
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); System.out.println("Bean: " + handlerMethod.getBean()); System.out.println("Method: " + method); return true; }
Java
복사
postHandle()
컨트롤러 호출 후에 실행되며 ModelAndView를 조작할 수 있다.
afterCompletion()
모든 작업이 완료된 후 수행된다.