Interceptor(인터셉터)는 웹 애플리케이션에서 요청과 응답을 가로채어 처리하는 미들웨어(Middleware) 컴포넌트입니다.
주로 스프링 MVC와 같은 웹 프레임워크에서 사용되며, 다음과 같은 목적으로 사용됩니다:
요청/응답 전/후 처리: Interceptor는 클라이언트의 요청이 컨트롤러에 도달하기 전과 컨트롤러에서 응답을 생성한 후에 추가적인 처리를 수행할 수 있습니다. 예를 들어, 로깅, 인증 및 권한 검사, 특정 헤더 추가, 요청 및 응답 데이터 변환 등의 작업을 수행할 수 있습니다.
글로벌 기능 추가: Interceptor를 사용하여 모든 컨트롤러나 특정 컨트롤러에서 공통으로 사용되는 기능을 중앙에서 구현할 수 있습니다. 이로써 코드 중복을 피하고 유지 보수성을 향상시킬 수 있습니다.
보안 및 권한 관리: 인증 및 권한 검사, 토큰 기반 인증, CORS (Cross-Origin Resource Sharing) 처리와 같은 보안 및 권한 관련 기능을 구현할 수 있습니다.
스프링 MVC에서 Interceptor를 사용하려면 HandlerInterceptor 인터페이스를 구현하고, 스프링 설정 파일에 등록하여 활성화합니다.
스프링 MVC에서 Interceptor를 사용하는 예제:
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 컨트롤러 호출 전에 실행되는 로직
return true; // true를 반환하면 요청 계속 진행, false를 반환하면 요청 중단
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 컨트롤러 실행 후, 뷰 렌더링 전에 실행되는 로직
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 뷰 렌더링 후 실행되는 로직, 예외 발생 시 예외 처리 로직도 포함 가능
}
}
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/secure/**"); // Interceptor를 특정 URL 패턴에 적용
}
}
위의 예제에서 MyInterceptor는 HandlerInterceptor를 구현하고, addInterceptors 메서드를 통해 특정 URL 패턴에 Interceptor를 적용하고 있습니다. Interceptor는 URL 패턴, HTTP 메소드, 특정 컨트롤러 등을 기반으로 적용 여부를 결정할 수 있습니다.