ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Interceptor
    Spring/MVC2-Filter 와 Interceptor 2023. 6. 20. 17:51
    728x90

    개념

    스프링 인터셉터도 서블릿 필터와 동일하게 사용자의 권한에 따른 흐름을 효과적으로 제어할 수 있는 기술이다.

    서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 말그대로 스프링 MVC가 제공하는 기술이다.

    앞서 설명한 필터와 매우 유사한 점이 많은 기술이지만, 적용되는 순서와 범위, 사용법에서는 다소 차이가 있다.

     

     

     

    스프링 인터셉터의 흐름

    HTTP 요청 ▶ WAS ▶ 필터  서블릿(DispatcherServlet) 스프링 인터셉터  컨트롤러

    필터와 스프링 인터셉터는 적용되는 위치가 근본적으로 다르다.

    DispatcherServlet 이후에 적용되는 스프링 인터셉터는 필터와는 다르게 더 많은 정보를 가지고 사용자의 권한에 따른 흐름을 제어할 수 있다. (앞으로 설명할 내용이다)

    또한 스프링 인터셉터도 필터처럼 URL패턴을 적용할 수 있는데, 훨씬더 정밀하게 설정이 가능하다.

     

     

    흐름의 세분화

     ...(생략)... ▶ 서블릿(DispatcherServlet) ▶ 인터셉터1 ▶ 인터셉터2 ▶  ...  ▶컨트롤러  : 인터셉터의 체이닝
                                                                               
                                                             적절하지 못한 요청판단시
                                                                               
                                                               컨트롤러 호출 막음!@

     

     

     

     

    스프링 인터셉터 인터페이스 - HandlerInterceptor

    mvc패턴을 공부할 때와 비슷한 naming이다. 즉, handler(Controller 내부 메소드)를 통제하는 기능을 담당할 것처럼 네이밍이되어있다.ㅋㅋㅋㅋ

    스프링 인터셉터를 사용하기 위해서 위의 인퍼페이스를 구현한 구현체가 있어야한다.

     

    handlerInterceptor에서 구현해야하는 메서드 확인하기

    default 메서드로 되어 있는 것으로보아 모든 메소드를 구현하지 않아도 됨을 알 수 있다.

    그럼 각가의 메서드들의 기능과 MVC패턴 내에서 어디서 작용하는지를 확인해보자.

    출처 : MVC2 김영한 강의 내용 中

    MVC모델에 대한 이해를 원한다면, 아래 참고

    그림에서 확인할 수 있듯이,

    preHadle은 실질적으로 handlerAdapter가 동작하기 이전에,

    postHadle은 controller에서 ModelAndView가 반환된 이후에,

    afterCompletion은 render()메소드 호출 이후에

    동작함을 알 수 있다.

     

    동작위치를 보면 각각의 메소드가 인자로 가지는 값이 무엇인지 어느정도 유추도 가능하다.

     

     

    예외발생시, Interceptor의 동작

    출처 : MVC2 김영한 강의 내용 中

    예외가 발생하면, postHandler는 작동하지 않는다. 대신 예외가 발생하던 안하던 항상 호출되는 afterCompletion이 호출된다. afterCompletion의 파라미터에 Exception ex가 있는 이유가 바로 이것이다.

Designed by Tistory.