interceptor는 말 그대로 낚아채다라는 의미로 서버로 들어온 request 객체를 컨트롤러의 핸들러로 도달하기 전에 낚아채 필요한 추가작업 후 핸들러로 보낼 수 있도록 한다. 인터셉터를 활용하면 요청과 응답을 가로챔으로써 기존 컨트롤러의 로직을 수정하지 않고 원하는 동작을 추가할 수 있다.
이 때 만약 핸들러 인터셉터를 등록해주지 않았다면 바로 컨트롤러가 실행되지만 반면에 하나 이상의 핸들러 인터셉터를 지정했다면 지정된 순서에 따라 인터셉터를 거쳐 컨트롤러를 실행한다.
대표적으로 세션기반의 로그인기능 구현 시 사용. controller에서 요청을 받아들이기 전 세션에서 로그인한 사용자가 있는지 확인 후 없다면 로그인페이지로 redirect 시킨다.
: Interceptor를 구현하기 위해서는 spring framework에서 지원하는 HandlerInterceptor 인터페이스를 Implements해서 사용하면 된다.
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 {
}
}