作者:ssslinppp
1. 拦截器简介及应用场景
![](https://images0.cnblogs.com/blog/731047/201507/011501537188137.png)
![](https://images0.cnblogs.com/blog/731047/201507/011501548757450.png)
2. 拦截器接口及拦截器适配器
![](https://images0.cnblogs.com/blog/731047/201507/011501555468078.png)
![](https://images0.cnblogs.com/blog/731047/201507/011501563432435.png)
![](https://images0.cnblogs.com/blog/731047/201507/011501585783319.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502000314074.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502011873387.png)
3. 运行流程图
正常运行
![](https://images0.cnblogs.com/blog/731047/201507/011502031401759.png)
中断流程
![](https://images0.cnblogs.com/blog/731047/201507/011502037814929.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502050003457.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502064212456.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502073122083.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502083433369.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502093437197.png)
4. 程序实例
控制层:
@Controller
@RequestMapping(value = "/test")
public class TestController {
@RequestMapping(value = "/interceptor12")
public String interceptor12() {
System.out.println("Controller层方法-interceptor12");
return "index";
}
@RequestMapping(value = "/interceptor34")
public String interceptor34() {
System.out.println("Controller层方法-interceptor34");
return "index";
}
} 总共定义了5个拦截器
![](https://images0.cnblogs.com/blog/731047/201507/011502103907010.png)
每个拦截器中只是打印消息,各拦截器类似,程序如下:
public class MyInterceptor1 extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor1-preHandle()");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object o, ModelAndView mav)
throws Exception {
System.out.println("MyInterceptor1-postHandle()");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object o, Exception excptn)
throws Exception {
System.out.println("MyInterceptor1-afterCompletion()");
}
配置拦截器
<!-- 定义拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截指定请求 -->
<mvc:mapping path="/test/interceptor12" />
<bean class="com.ll.Interceptor.MyInterceptor1" />
</mvc:interceptor>
<!-- 拦截所有的请求 -->
<mvc:interceptor>
<mvc:mapping path="/test/*" />
<bean class="com.ll.Interceptor.MyInterceptorAll" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/test/interceptor12" />
<bean class="com.ll.Interceptor.MyInterceptor2" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/test/interceptor34" />
<bean class="com.ll.Interceptor.MyInterceptor3" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/test/interceptor34" />
<bean class="com.ll.Interceptor.MyInterceptor4" />
</mvc:interceptor>
</mvc:interceptors> 特别注意拦截器的配置顺序,如下:
- MyInterceptor1;
- MyInterceptorAll;
- MyInterceptor2;
- MyInterceptor3;
- MyInterceptor4;
其中,MyInterceptor1和MyInterceptor2拦截interceptor12请求,MyInterceptor3和MyInterceptor4拦截interceptor34请求,MyInterceptorAll拦截所有请求。
![](https://images0.cnblogs.com/blog/731047/201507/011502114847108.png)
6. 其他应用举例-登录检测
![](https://images0.cnblogs.com/blog/731047/201507/011502127813379.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502137183694.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502142651594.png)
![](https://images0.cnblogs.com/blog/731047/201507/011502154378433.png)