◆ 인터셉터( Interceptor )
웹 요청 시 Controller로 가는 요청을 가로 채 전후 처리를 할 수 있도록 하는 역할
▶ 인터셉터와 필터의 차이?
필터 역시 전/후처리를 하는 역할로 인터셉터와 같은 기능을 수행하지만 둘의 특징에 따라 사용하는 용도가 조금 달라질 수 있다.
( 필터는 주로 문자 인코딩 설정등에 사용됨 )
-
- 실행 시점이 다르다.
- Spring MVC request life cycle Request -> Filter -> DispatcherServlet -> Controller/Interceptor
-
- 접근영역이 다르다.
- Fileter는 웹 어플리케이션에 등록(web.xml)하고, Interceptor는 Spring Context에 등록한다.
▶ 인터셉터 설계
1. HandlerInterceptor구현 또는 HandlerInterceptorAdapter를 상속하는 클래스 작성
2 메서드 설계
-
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
-
Controller가 실행되기 전
실행되는 메서드 true를 리턴할 경우 Controller로 요청을 보낸다.
-
- postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
-
Controller가 실행된 후
View렌더링 직전 호출 매개인자의 ModelAndView객체에 Controller가 넘겨주는 값들이 저장된다.
-
- afterCompletion()
- View(화면)처리까지 끝난 후에 호출
3. Spring Context에 등록
인터셉터가 적용될 경로와 함께 등록 시켜주도록 한다.
아래와 같은 방식으로 어노테이션 핸들러 매핑을 등록할 때 같이 등록하는 방식도 가능하다.
어노테이션 매핑은 bean으로 등록하지 않아도 처리 가능하나, 인터셉터를 아래와 같은 방식으로 등록할 때는 아래와 같이 등록해야한다.