实现HandlerInterceptor接口。
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;
}
SpringMVC配置拦截器:
执行时机和顺序:
FirstInterceptor#preHandle
SecondInterceptor#preHandle
targetMethod
SecondInterceptor#postHandle
FirstInterceptor#postHandle
render
SecondInterceptor#afterCompletion
FirstInterceptor#afterCompletion
在调用目标方法前,依次执行自定义拦截器的preHandle方法。
preHandle(): 该方法在目标方法之前被调用,若返回true,则继续执行后续的拦截器和目标方法,若返回false,则不会执行后续的拦截器和目标方法。
将FistInterceptor拦截器的preHandle()方法返回值改为false。
FirstInterceptor#preHandle
将SecondInterceptor拦截器的preHandle()方法返回值改为false,FirstInterceptor的preHandle()方法改为true。
FirstInterceptor#preHandle
SecondInterceptor#preHandle
FirstInterceptor#afterCompletion
postHandle():在调用目标方法之后,渲染视图之前被调用。
afterCompletion():在渲染视图(render)之后被调用。
作用: preHandle():可以做权限,日志,事务。 postHandle():可以对请求域中的属性或视图进行修改。 afterCompletion():释放资源。