인터셉터란?

2020-08-03

해당 Post는 인터셉터에 대해서 정리한 파일입니다.


인터셉터(Interceptor)?

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

그림을 통해서 봅시다.

스프링이 동작될 때 클라이언트로부터 요청이 들어오면 필터가 존재한다면 필터를 수행하고, 그리고 DispatcherServlet이 수행됩니다.

우리 같은 경우에는 charset을 지정하는 필터가 정의가 되어있었습니다.

스프링이 제공하는 필터를 사용했었고 web.xml이나 그와 같은 일을 하는 부분에다가 이 필터를 등록을 시켰습니다.

그렇게 되면 일단 요청이 들어왔을 때 필터라고 하는 것은 요청을 받아내기 전, 응답이 나가기 전, 이때 수행되는 것이 필터였습니다.

필터가 있다면 수행을 하고 없다면 Dispatcher Servlet이 받아서 수행을 하게 됩니다.

DispatcherServlet은 선처리 작업할 것들이 존재했다면 먼저 선처리 작업을 해주고 HandlerMapping을 통해서

실제 어떤 Handler가 동작을 해야 되는지 이런 부분들을 얻어내고, Handler가 실행이 되었습니다.

이때 잘 보시면 DispatcherServlet이 Handler를 수행할 때 이 중간에 HandlerInterceptor라고 하는 것이 있다는 것을 알 수 있습니다.

그리고 이런 요청이 끝났다면 View의 정보를 DispatcherServler한테 넘겨줍니다.

그래서?

DispatcherServlet에서 Handler로 요청을 보낼 때 Handler에서 DispatcherServlet 으로 응답을 보낼 때 동작을 하게 되는 것이 인터셉터입니다.

이런 인터셉터를 작성하는 방법은 HandlerInterceptor 인터페이스를 구현을 하거나 아니면 HandlerInterceptorAdapter 클래스를 상속을 받으면 됩니다.

이렇게 만들어진 인터셉터를 Java Config를 사용할 경우에는 WebMvcConfiguerAdapter가 가지고 있는 addInterceptors 메서드를 오버라이딩하고 등록하는 과정을 거쳐주면 됩니다.