Spring MVC 를 사용하다가 보면 필연적으로 Interceptor 를 사용하게 됩니다.
Controller 에서 공통적으로 또는 특정 패키지들에 속한 부분에 대해서 선후 처리가 필요하기 때문입니다.
예전에 이러한 부분들을 AOP 로 구현한 것을 보았습니다. 다른 부분들은 AOP 로 구현하는것이 문제가 아니지만
Controller 부분이라면 Interceptor로 구현하시는것을 권장합니다.
Spring MVC 에서 interceptor 에 대해서 알아보겠습니다.
org.springframework.web.servlet.HandlerInterceptor ,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
를 상속받아 Interceptor를 구현하면 됩니다.
HandlerInterceptor 를 상속할 경우
preHandle , postHandle , afterCompletion 이렇게 3가지로 구분되어져 있습니다.
이름에서 대충 알수 있겠지만
preHandle : Controller 가 수행되기 전에 실행됩니다. 여기서는 이후 Controller를 수행할지 여부를 boolean 으로 return 하게 됩니다.
postHandle : Controller 가 수행된후 View 를 호출하기 전 상태입니다.
afterCompletion : View 작업까지 완료된 후 호출 됩니다. responseBody 를 이용할 경우 UI 에 이미 값을 전달후 해당 부분이 호출됩니다.
호출됩니다.
01 |
package com.softline.study.interceptor; |
03 |
import javax.servlet.http.HttpServletRequest; |
04 |
import javax.servlet.http.HttpServletResponse; |
06 |
import org.springframework.web.servlet.HandlerInterceptor; |
07 |
import org.springframework.web.servlet.ModelAndView; |
10 |
public class ControllerLoggingInterceptor implements HandlerInterceptor { |
12 |
public boolean preHandle(HttpServletRequest request, |
13 |
HttpServletResponse response, Object handler) throws Exception { |
14 |
System.out.println( "preHandle" ); |
19 |
public void postHandle(HttpServletRequest request, |
20 |
HttpServletResponse response, Object handler, |
21 |
ModelAndView modelAndView) throws Exception { |
22 |
System.out.println( "postHandle" ); |
25 |
public void afterCompletion(HttpServletRequest request, |
26 |
HttpServletResponse response, Object handler, Exception ex) |
28 |
System.out.println( "afterCompletion" ); |