티스토리 뷰

안녕하세요 강정호입니다.

오늘은 HandlerInterceptorAdapter에 대해 공부해 보겠습니다.


인터셉터란?

클라이언트의 요청이 Controller로 가기 전에 중간에 요청을 가로채서 검사하는 모듈입니다. 예를 들어 클라이언트의 요청이 들어왔는데, 로그인을 하지 않아 Session이 생성되지 않았다면 Interceptor가 체크를 하고 로그인 페이지로 돌려보내주게 됩니다.



인터셉터 구현

HandlerInterceptorAdapter에서 제공하는 메서드는 4가지입니다.


    PreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    • 컨트롤러(즉 RequestMapping이 선언된 메서드 진입) 실행 직전에 동작.
    • 반환 값이 true일 경우 정상적으로 진행이 되고, false일 경우 실행이 멈춥니다.(컨트롤러 진입을 하지 않음)
    • 전달인자 중 Object handler는 핸들러 매핑이 찾은 컨트롤러 클래스 객체입니다.
  • PostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
    • 컨트롤러 진입 후 view가 랜더링 되기 전 수행이 됩니다.
    • 전달인자의 modelAndView을 통해 화면 단에 들어가는 데이터 등의 조작이 가능합니다.
  • afterComplete(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    • 컨트롤러 진입 후 view가 정상적으로 랜더링 된 후 제일 마지막에 실행이 되는 메서드입니다.
  • afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
    • Servlet 3.0부터 비동기 요청이 가능해짐에 따라 비동기 요청 시 PostHandle와 afterCompletion메서드를 수행하지 않고 이 메서드를 수행하게 됩니다. (Spring에서 제공함)



예제 코드


댓글