定义拦截器之前,我们先来看看贯穿整个请求的一个类HandlerExecutionChain,顾名思义就是执行链,他贯穿整个请求的过程。
HandlerExecutionChain 有一个属性List<HandlerInterceptor>
,你可以在里面注册多个拦截器,进行业务拦击,我们在配置文件注册一下
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.liuxg.interceptor.PrivilegeInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<mvc:mapping />
可以映射拦截的路径,还可以配置mvc:exclude-mapping />
可以配置不需要拦截的路径
定义一个连接器,可以继承于HandlerInterceptorAdapter,重写拦截的几个过程
/***
* 拦截,主要是用来装载用户信息和权限信息
* @author liuxg
* @date 2015年8月21日 下午7:23:29
*/
public class PrivilegeInterceptor extends HandlerInterceptorAdapter{
/**
* 进入controller之前
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
return super.preHandle(request, response, handler);
}
/**
* controller业务处理完之后,生成视图之前
*/
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
/**
* 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}