티스토리 뷰

1) 인터셉터란?

  • 스프링 DispatherServlet의 내부 동작에 대해서 다시 한번 살펴보겠습니다. 스프링이 동작될 때 클라이언트로부터 요청이 들어오고 만약 필터가 존재한다면 필터가 작업을 수행을 합니다. 예시로는 charset을 지정하는 필터가 있습니다. 스프링이 제공하는 필터를 사용할 수 있고 web.xml이나 그와 같은 일을 하는 부분에다가 이 필터를 등록을 하면 됩니다.
  • 그러면 필터라고 하는 것은 요청이 들어왔을 때 요청을 받아내기 전, 응답이 나가기 전, 이때마다 수행되는 것입니다. 필터가 있다면 수행을 하고, 없다면 DispatcherServlet이 받아서 수행을 하게 될 겁니다.
  • DispatcherServlet은 선처리 작업할 것들이 존재했다면 먼저 선처리 작업을 해주고 HandlerMapping을 통해서 어떤 Handler가 동작을 해야 되는지 이런 부분들을 얻어냈을 겁니다.
  • 그리고 나서 Handler가 실행이 됩니다. 이때 DispatcherServlet Handler를 수행할 때 중간에 HandlerInterceptor라는 것이 있는데 이것을 통해서 처리할 것이 있다면 작업을 수행합니다.
  • 그리고 이런 요청이 끝났다면 View의 정보를 DispatcherServler한테 넘겨줬을 겁니다. 그리고 ViewResolver를 이용해서 View의 정보를 얻어온 다음 해당 View를 찾아서 응답하는 일까지 수행을 합니다.

인터셉터(Interceptor)?

  • Interceptor Dispatcher servlet에서 Handler(Controller)로 요청을 보낼 때, Handler에서 Dispathcer servlet으로 응답을 보낼 때 동작합니다.

인터셉터 작성법

  • org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현합니다.
  • org.springframework.web.servlet.handler.HandlerInterceptorAdapter 클래스를 상속받습니다.
  • Java Config를 사용한다면, WebMvcConfigurerAdapter가 가지고 있는 addInterceptors 메소드를 오버라이딩하고 등록하는 과정을 거칩니다.
  • xml 설정을 사용한다면, <mvc:interceptors> 요소에 인터셉터를 등록합니다.

생각해보기

  • 인터셉터와 유사한 기능에 서블릿 필터(Servlet Filter)가 있습니다. Servlet Filter는 모든 요청을 받고 응답할 때 공통 처리를 위해 사용됩니다. 서블릿 필터와 인터셉터의 차이점을 조사해보세요.
    일반적으로 필터와 인터셉터는 실행되는 시점이 다르며, 필터는 web application에, 인터셉터는 spring의 context에 등록한다고 한다. 그 외에 예외처리 방법도 다르며 처리 시점에 대해서도 필터는 서블릿 전후, 인터셉터는 핸들러 실행 전, 실행 후, 뷰 렌더링 이후 등 메서드에 따라 다르게 갖고 있다.
    출처: https://supawer0728.github.io/2018/04/04/spring-filter-interceptor/

참고 자료

[참고링크] Introduction to Spring MVC HandlerInterceptor
http://www.baeldung.com/spring-mvc-handlerinterceptor

[참고링크] Spring MVC Interceptor HandlerInterceptorAdapter, HandlerInterceptor Example
https://www.journaldev.com/2676/spring-mvc-interceptor-example-handlerinterceptor-handlerinterceptoradapter

 

Comments