ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springMVC中的拦截器Interceptor

2020-11-23 20:02:48  阅读:201  来源: 互联网

标签:Exception 拦截器 preHandle springMVC Interceptor public 运行


1 拦截器概念

拦截器( Interceptor)是一种动态拦截方法调用的机制 作用:

  1. 在指定的方法调用前后执行预先设定后的的代码

  2. 阻止原始方法的执行

 核心原理: 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>

 

标签:Exception,拦截器,preHandle,springMVC,Interceptor,public,运行
来源: https://www.cnblogs.com/codeman-blogs/p/14026553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有