HttpRequest
와 HttpResponse
를 가로채는 역할HandlerInterceptor
인터페이스를 구현해 필터처럼 동작하며,true
를 반환하면 요청이 계속 진행되고, false
를 반환하면 요청이 중단ModelAndView
객체를 수정할 수 있어, View에 공통 데이터 추가 가능HandlerInterceptor
인터페이스를 구현해, 세 가지 메서드를 오버라이딩💡 @Congiguration
은 Spring에서 설정 클래스를 정의할 때 사용하는 어노테이션
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("preHandle: 요청 처리 전에 실행됩니다.");
return true; // true: 컨트롤러 실행 계속 / false: 요청 중단
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle: 컨트롤러 실행 후 실행됩니다.");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("afterCompletion: 요청 처리가 끝난 후 실행됩니다.");
}
}
WebMvcConfigurer
를 구현해 등록해야 한다.@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()) // 인터셉터 등록
.addPathPatterns("/api/**") // 특정 패턴의 요청만 적용
.excludePathPatterns("/api/public/**"); // 특정 경로 제외 가능
}
}
HandlerInterceptor
의 주요 메서드의 동작은 view
를 기반으로 동작@RestController
에서는 어떻게 동작할지 궁금하다 ..!@RestController
를 사용하는 경우, View를 렌더링하지 않고 JSON 데이터를 직접 반환하므로ModelAndView
는 null
💡postHandle()
이 ViewResolver
없이 실행되는 점만 다르고, 나머지는 동일하게 동작한다.