拦截器: SpringMVC中定义的一个对象,必须实现HandlerInterceptor
作用:拦截器用户的请求,可以判断请求,根据判断结果可以截断请求,也可以让控制器来处理请求
拦截器执行时间:在获取设配器对象之后,在控制器执行之前,拦截用户的请求
特点:是全局的,对所有的Controller都可以拦截到,一个项目中可以有多个拦截器对象
- 在SpringMVC核心配置文件中:
<!--声明自定义拦截器-->
<mvc:interceptors>
<!--声明第一个拦截器-->
<mvc:interceptor>
<!--拦截的请求uri地址-->
<mvc:mapping path="/some.do"/>
<!--指定拦截器对象,class:拦截器类的全限定名称-->
<bean class="com.bjpowernode.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
- 前端:
<a href="some.do">转发</a>
- 自定义拦截器:
public class MyInterceptor implements HandlerInterceptor{
/**预处理函数,用户的请求先到达这个函数
* 可以请求做处理,验证登录,用户权限处理,记录日志等
* handler是被拦截的控制器对象
* */
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler)
throws Exception {
System.out.println("MyInterceptor preHandle");
return true;
}
/**postHandler:后处理函数,在控制器函数执行后执行的
* 作用是能够获取到控制器函数的执行结果ModelAndView可以修改执行结果
* 的数据和视图,对请求的二次处理
* 参数中的modelAndView是控制器的执行结果,函数的返回值
* */
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView)
throws Exception {
System.out.println("MyInterceptor postHandle");
}
/**afterCompletion:最后执行的函数,在视图view处理完成后执行的,视图处理完成意味着请求完成
* 相当于程序最后执行的一个函数,可以在函数中执行资源回收,内存释放等最后要执行的工作
*
* afterCompletion只有在当前的拦截器preHandle()返回true时才有机会执行
* */
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
System.out.println("MyInterceptor afterCompletion");
}
}
- 输出结果:

注意:当MyInterceptor中的preHandel返回值为true时才能执行afterCompletion,当返回为false时用户的请求只停留在preHandle不会执行MyController中的函数以及MyInterceptor中的postHandle和afterCompletion
- SpringMVC拦截器原理
- 单个拦截器原理:

注意:只有preHandle为true时请求才能到达Controller层,才能有后面操作
- 多个拦截器原理:


本文详细介绍了 SpringMVC 中的拦截器概念及其使用方式。包括如何定义自定义拦截器,拦截器的执行流程及作用,如预处理、后处理和最终处理等阶段。同时探讨了单个与多个拦截器的执行原理。
1025

被折叠的 条评论
为什么被折叠?



