Springあるある

스프링 인터셉터(FEAT. Spring Interceptor)

JIN_YOUNG _KIM 2025. 1. 17. 12:23

참고로 스프링(스프링 MVC)의 시작은 서블릿(정확히는 Dispatcher Servlet)이라는 점을 잊지 말자

 

 

 

 // 스프링 인터셉트
 
 public interface HandlerInterceptor {

// 아래 3개의 메서드를 제공
 
 default boolean preHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler) throws Exception {}


 default void postHandle(HttpServletRequest request, HttpServletResponse 
response,Object handler, @Nullable ModelAndView modelAndView) throws Exception {}


 default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws 
Exception {}
 }

참고로, 위 인터페이스의 구현체는 [싱글톤]으로 스프링 컨테이너에 등록이 된다. 

그리고 실무에서는 꼭 서블릿 필터를 사용해야만 하는 상황이 아니라면 대부분 스프링 인터셉터를 사용한다.

그 이유는 허용할 요청 URL에 대한 세밀한 설정이 가능하기 때문이다. 

@Configuration
public class WebConfig implements WebMvcConfigurer {

  
    /**
     * 스프링 인터셉터 등록  : WebMvcConfigurer 상속 필요 
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(new LogInterceptor())
                .order(1)
                
                // PathPatter 공식문서를 보고, 유연하게 요청 URL을 지정할 수가 있다. 
                .addPathPatterns("/**")
                .excludePathPatterns("/css/**","/*.icon","/error");

        registry.addInterceptor(new LoginCheckInterceptor())
                .order(2)
                .addPathPatterns("/**")
                .excludePathPatterns("/","/members/add","/login","/logout","/css/**","/*.ico");


    }
}