인터셉터는 스프링 MVC의
HandlerInterceptor인터페이스를 구현하여 요청 처리 과정에서의 특정 시점에 작업을 수행할 수 있는 컴포넌트.
인터셉터는 요청이 컨트롤러에 도달하기 전, 컨트롤러가 처리된 후, 뷰가 렌더링된 후에 작업을 수행할 수 있음.인터셉터는 스프링 MVC의 핸들러 매핑, 핸들러 어댑터와 관련이 있으며, 스프링 MVC 컨텍스트에서 관리됨
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
👉 컨트롤러의 메서드가 호출되기 전에 실행. true 를 반환하면 요청을 계속 처리하고, false 를 반환하면 요청 처리를 중단.
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
👉 컨트롤러의 메서드가 호출된 후, 뷰가 렌더링되기 전에 실행됨.
afferCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
👉 뷰가 렌더링 된 후, 요청 처리 후에 실행
예제
import org.springframework.web.servlet.HandlerInterceotor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre-handle: Request received at " + System.currentTimeMillis());
return true; // 요청을 계속 처리하도록 허용
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("Post-handle: Request processed at " + System.currentTimeMillis());
}
@Override
afferCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("After completion: Request completed at " + System.currentTimeMillis());
}
}
등록 방법
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggingInterceptor()).addPathPatterns("/**"); // 인터셉터를 적용할 URL 패턴 설정
}
}
FilterRegistrationBean 을 통해 스프링에서 등록할 수도 있음.WebMvcConfigurer 를 구현한 설정 클래스에서 등록