1 拦截器概念
拦截器( Interceptor)是一种动态拦截方法调用的机制 作用:
-
在指定的方法调用前后执行预先设定后的的代码
-
阻止原始方法的执行
核心原理: AOP思想 拦截器链:多个拦截器按照一定的顺序,对原始被调用功能进行增强
拦截器VS过滤器
归属不同: Filter属于Servlet技术, Interceptor属于SpringMVC技术
拦截内容不同: Filter对所有访问进行增强, Interceptor仅针对SpringMVC的访问进行增强
2自定义拦截器开发过程
实现HandlerInterceptor接口
//自定义拦截器需要实现HandleInterceptor接口 public class MyInterceptor implements HandlerInterceptor { //处理器运行之前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("前置运行----a1"); //返回值为false将拦截原始处理器的运行 //如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行 return true; } //处理器运行之后执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("后置运行----b1"); } //所有拦截器的后置执行全部结束后,执行该操作 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("完成运行----c1"); } //三个方法的运行顺序为 preHandle -> postHandle -> afterCompletion //如果preHandle返回值为false,三个方法仅运行preHandle }
3 配置拦截器
<!--开启拦截器使用--> <mvc:interceptors> <!--开启具体的拦截器的使用,可以配置多个--> <mvc:interceptor> <!--设置拦截器的拦截路径,支持*通配--> <!--/** 表示拦截所有映射--> <!--/* 表示拦截所有/开头的映射--> <!--/user/* 表示拦截所有/user/开头的映射--> <!--/user/add* 表示拦截所有/user/开头,且具体映射名称以add开头的映射--> <!--/user/*All 表示拦截所有/user/开头,且具体映射名称以All结尾的映射--> <mvc:mapping path="/*"/> <mvc:mapping path="/**"/> <mvc:mapping path="/handleRun*"/> <!--设置拦截排除的路径,配置/**或/*,达到快速配置的目的--> <mvc:exclude-mapping path="/b*"/> <!--指定具体的拦截器类--> <bean class="com.itheima.interceptor.MyInterceptor"/> </mvc:interceptor> <!--配置多个拦截器,配置顺序即为最终运行顺序--> <mvc:interceptor> <mvc:mapping path="/*"/> <bean class="com.itheima.interceptor.MyInterceptor2"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/*"/> <bean class="com.itheima.interceptor.MyInterceptor3"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.itheima.interceptor.MyInterceptor4"/> </mvc:interceptor> </mvc:interceptors>