ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 핸들러 인터셉터
    Spring/Spring MVC 2020. 4. 28. 00:28

    어떤 핸들러의 요청처리 전 후로 부가적인 작업을 하고 싶다면 핸들러 인터셉터를 만들어서 사용할 수 있다. 

     

     

     

    이 핸들러는 hello에 대해 요청처리 후 뷰 렌더링이 되는 핸들러이다.

     

    이 핸들러의 요청을 처리하기 전에 PreHandle 전처리 작업과

     

    요청을 처리한 후 뷰 렌더링 처리 직전 postHandler 처리가 가능하다.

     

    뷰 랜더링 까지 완전히 끝난 이후에도 afterCompletion 으로 전후 처리의 템플릿을 제공하고 있다.

     

    * 서블릿 필터와 비슷하지만 좀 더 구체적인 것 같다.

     

     

    핸들러 인터셉터는 preHandle시  true나 false를 return 하게 되는데 true 시 이 다음 핸들러가 쭉 진행되고

     

    false 시 응답 처리를 끝내고 다음 핸들러로 가지말고 요청 처리를 끝내라는 것을 의미한다. afterCompletion

     

    가지 않는다.

     

    preHandle  (true 시)=> 요청 처리 => postHandler => 뷰 랜더링 => afterCompletion

     


     

    핸들러 인터셉터의 순서?

     

    preHandle과 postHandler가 2개라면 

     

    preHandler1

    preHandler2

    .

    .

    postHandler2

    postHandler1

    .

    .

    afterCompletion 2

    afterCompletion 1

     

    다음과 같이 postHandler는 역순으로 호출이 된다. afterCompletiont은 뷰 랜더링이 완전히 끝난 다음에

     

    호출이 되는데 RestController의 경우 뷰 랜더링 과정이 없으므로 postHandler 이후 바로 호출되게 된다.

     


     

    핸들러 인터셉터 와 서블릿 필터의 차이?

     

    핸들러 인터셉터의 템플릿이 더 구체적이다. ModelAndView와 핸들러 정보등 제공되는 것이 더 많다.

     

    따라서 핸들러에 따라 특정 로직을 변경해야 한다면 핸들러 인터셉터를 구현해야 한다.

     

    Spring MVC에 특화된 정보 : 핸들러 인터셉터 구현

     

    일반적인 정보 : 서블릿 필터

     


     

    핸들러 인터셉터 구현해보기

     

    GreetingInterceptor와 AnotherInterceptor 2개의 핸들러 인터셉터를 만들어주었다.

     

     

    두 클래스 모두 실제 핸들러 까지 처리할 수 있도록 preHandle을 true로 리턴해주었다.

     

    preHandle은 handler의 정보를 참조할 수 있다.

     

    postHandler는 modelAndview 정보를 수정할 수 있다.

     

    afterCompletion은 어떤 핸들러가 처리했고 에러가 발생했는지 등을 Exception을 통해 확인 가능하다.

     

     

     

     

    registry에 우리가 만든 인터셉터들을 등록한다.

     

    이때 별다른 order가 없을 시 add 한 순서대로 먼저 적용이 된다.

     

     

     

     

     

    이제 테스트를 만들어서 해당 get 메소드로 /hello 요청을 한다면 전처리 작업이 진행이 된다.

     

     

     

     

     

    order 값을 주어서 우선순위를 변경할 수도 있고 특정 패턴에만 동작하는 형식도 가능하다.

     

    'Spring > Spring MVC' 카테고리의 다른 글

    WebMvcConfigurer 살펴보기  (0) 2020.05.31
    Json 컨버터  (0) 2020.05.28
    HTTP 메세지 컨버터와 String  (0) 2020.05.28
    리소스 핸들러  (0) 2020.05.02
    Spring MVC Formatter 사용법  (0) 2020.04.21
Designed by Tistory.