SpringMVC的拦截器及其原理

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

拦截器: 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层,才能有后面操作

  • 多个拦截器原理:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值