개발/Spring Boot

[Spring Boot] Spring Interceptor 란? (HandlerInterceptor)

아현이라구 2024. 2. 28. 11:07
반응형

HandlerInterceptor는 스프링 프레임워크의 인터페이스로, 특히 스프링 MVC 모듈 내에 있습니다.

이 인터페이스를 사용하면 들어오는 HTTP 요청과 나가는 HTTP 응답을 가로채고, 사전 처리 및 사후 처리 작업을 수행할 수 있습니다.

스프링 MVC 애플리케이션에서 인터셉터는 이력관리, 로깅, 인증, 권한 부여, 세션 관리 등과 같은 교차 관심사를 구현하는 데 사용됩니다.

HandlerInterceptor 인터페이스를 구현함으로써 사용자 정의 로직을 정의하여

  • (preHandle 메서드) 컨트롤러가 요청을 처리하기 전
  • (postHandle 메서드) 컨트롤러 로직이 실행된 후이지만 뷰가 렌더링되기 전
  • (afterCompletion 메서드) 및 뷰가 렌더링된 후에 실행될 수 있습니다

여기 HandlerInterceptor 인터페이스에 정의된 메서드의 간단한 개요가 있습니다:

 

preHandle: 이 메서드는 컨트롤러의 실제 핸들러 메서드가 호출되기 전에 호출됩니다. 로깅, 인증 및 유효성 검사와 같은 작업에 사용될 수 있습니다. 요청을 계속 진행할지 여부를 나타내는 boolean 값을 반환합니다.

 

postHandle: 이 메서드는 핸들러 메서드가 호출된 후에 뷰가 렌더링되기 전에 호출됩니다. ModelAndView 객체를 렌더링하기 전에 수정할 수 있습니다. 모델에 속성을 추가하거나 뷰를 수정하는 등의 작업에 사용될 수 있습니다.

 

afterCompletion: 이 메서드는 뷰가 렌더링된 후에 호출됩니다. 일반적으로 리소스 해제 또는 로깅과 같은 정리 작업에 사용됩니다. 요청 처리 중에 발생할 수 있는 예외를 처리할 수 있는 Exception 매개변수를 받습니다.

 

스프링 MVC 애플리케이션에서 HandlerInterceptor를 사용하려면 HandlerInterceptor 인터페이스를 구현하는 클래스를 정의하고, 그런 다음 프로그래밍 방식이나 구성을 통해 InterceptorRegistry에 등록해야 합니다.

 

다음은 사용자 정의 HandlerInterceptor를 정의하는 방법의 예시입니다:

import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import org.springframework.web.servlet.HandlerInterceptor;  
import org.springframework.web.servlet.ModelAndView;  

public class MyInterceptor implements HandlerInterceptor {  

    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        // 사전 처리 로직  
        return true; // 요청을 계속 진행  
    }  

    @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 {  
        // 정리 또는 로깅 로직  
    }  
}  

그런 다음 이 인터셉터를 스프링 MVC 구성에 등록할 수 있습니다:

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;  
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  

@Configuration  
public class WebMvcConfig implements WebMvcConfigurer {  

    @Override  
    public void addInterceptors(InterceptorRegistry registry) {  
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");  
    }  
}

이 예시에서 MyInterceptor 클래스는 HandlerInterceptor 인터페이스를 구현하며, addInterceptors 메서드를 사용하여 모든 요청("/**")을 인터셉트하도록 등록됩니다.

반응형