개요
•
인터셉터는 스프링이 제공하고 있는 기술로 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 인터셉터를 이용할 수 있다.
•
인터셉터는 요청과 응답을 가로채서 원하는 동작을 추가하고자 할 때 사용될 수 있다.
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()
▪
모든 작업이 완료된 후 수행된다.