创建自定义拦截器只需三步。
第一步:创建一个类实现拦截器接口HandlerInterceptor的三个方法。
方法名 | 说明 |
---|---|
preHandle | 方法将在请求处理之前进行调用,该方法的返回值布尔值 Boolean类型的当它返回为 false时,表示请求结束,后续的 Interceptor:和 Controller都不会再执行;当返回值为true时就会继续调用下—个 Interceptor的 preHandle方法 |
postHandle | 方法是在当前请求进行处理之后被调用,也就是说会在 DispatcherServlet进行视图返回渣染之前被调用,所以我们可以在这个方法中对 Controller处理之后的 ModelAndView对进行操作 |
afterCompletion | 该方法将在整个请求结束之后执行,也就是在 DispatcherServlet渲染了对应的视图之后执行 |
第二步:Spring-Mvc.xml配置文件中配置注入自定义拦截器。
<!-- 注入拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截的Web资源路径 -->
<mvc:mapping path="/**/"/>
<!-- 不进行拦截的资源路径 -->
<mvc:exclude-mapping path="/user/quick14"/>
<!-- 拦截器地址 -->
<bean class="com.itcast.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
第三步:启动程序,测试自定义拦截器是否生效。
完整代码如下:
public class MyInterceptor implements HandlerInterceptor {
/**
* 执行方法前调用
*
* @param request
* @param response
* @param handler
* @return true:同意请求 false:拒绝请求
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getParameter("token");
System.out.println("preHandle请求....");
if ("token".equals(token)) {
return true;
} else {
return false;
}
}
/***
* 执行方法后执行
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle请求....");
}
/**
* 整个方法执行完成后 调用
*
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion请求....");
}
}