인터셉터(Interceptor)는 어떠한 URI를 호출했을 때 해당 요청의 컨트롤러가 처리되기 전 또는 후에 작업을 하기 위해 사용된다.
회원제로 이루어지는 시스템이 있다고 가정했을 때, 로그인이나 계정의 권한과 관련된 처리 등을 인터셉터를 이용해서 더욱 효율적으로 처리할 수 있다.
이러한 역할은 필터(Filter)와 인터셉터(Interceptor)로 수행할 수 있는데 여기서는 일단 인터셉터를 다루고 나중에 필터에 대해서 공부를 해볼려고 한다.
spring에서 인터셉터는 HandlerInterceptor 인터페이스를 implements 하여 구현할 수 있다.
해당 인터페이스는 preHandle, postHandle, afterCompletion 총 세개의 추상 메서드를 포함하고 있다.
롬복(Lombok)에서 제공해주는 어노테이션으로 로깅 추상화 라이브러리이다.
로깅 추상화란, 로깅을 직접 하지 않고 로깅 구현제를 찾아 기능을 사용할 수 있게 해주는 것을 의미한다.
컨트롤러 실행 전에 수행
컨트롤러 수행 후 결과를 뷰로 보내기 전에 수행
뷰의 작업까지 완료된 후 수행
src/main/java/board 패키지 아래에 interceptor 패키지를 생성하고 LoggerInterceptor 클래스를 생성한다.

package board.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LoggerInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("==================== START ====================");
log.debug(" Request URI \t: " + request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.debug("==================== END ====================");
}
}
LoggerInterceptor 클래스에 위와 같이 작성한다.
애플리케이션 내에서 인터셉터가 작동할 수 있도록 빈(Bean)으로 등록해줘야 한다.
config 패키지 안에 WebMvcConfig 클래스를 추가하여 작성한다.
package board.board.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import board.interceptor.LoggerInterceptor;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggerInterceptor())
.excludePathPatterns("/css/**", "/images/**", "/js/**");
}
}
@EnableWebMvc가 제공하는 빈을 커스터마이징할 수 있는 기능을 제공하는 인터페이스
@EnableWebMvc은 설정이 완료된 여러 스프링 빈을 자동으로 추가해줌.
애플리케이션 내에 인터셉터를 등록해주는 기능을 한다.
InterceptorRegistry의 addInterceptor() 메서드를 이용하여 인터셉터 클래스를 등록하는데 excludePathPatterns()는 여기에 지정된 URI나 경로(Path)는 인터셉터 호출에서 제외하겠다는 메서드이다. 정적(statie)파일을 무시하겠다는 의미이다.

실행을 하게 되면 이렇게 뜨게된다.