JAVA SpringMVC实现自定义拦截器


Posted in Python onMarch 16, 2022

SpringMVC实现自定义拦截器

1 拦截器(interceptor)的作用

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截
的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实
现。

2 拦截器和过滤器区别

关于interceptor和filter的区别,如图所示:

JAVA SpringMVC实现自定义拦截器

3.实现过程

步骤分析:

  1. 创建拦截器类实现HandlerInterceptor接口
  2. 配置拦截器
  3. 测试拦截器的拦截效果

3.1创建拦截器类实现HandlerInterceptor接口

public class MyInterceptor implements HandlerInterceptor {

    /**
     *         preHandle: 在目标方法执行之前 进行拦截   return false:不放行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle1....");

        return true;
    }

    /**
     *       postHandle: 在目标方法执行之后,视图对象返回之前,执行的方法
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle1....");
    }

    /**
     *        afterCompletion:在流程都执行完成后,执行的方法
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion1....");
    }


}

3.2配置拦截器

<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--对哪些资源执行拦截操作 path="/**"表示对controller层所有方法进行拦截 -->
            <mvc:mapping path="/**" />
            <bean class="com.weihong.interceptor.MyInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

3.3测试拦截器的拦截效果

@RequestMapping("/target")
    public String targetMethed(){
        System.out.println("目标方法执行了");
        return "interceptor";
    }

3.4编写jsp页面

<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>success~~~~~~</h3>
    <% System.out.println("视图执行了....");%>
</body>
</html>

3.5测试结果

JAVA SpringMVC实现自定义拦截器

4. 拦截器链

开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。开发步骤和单个拦截器是一样的,只不过注册的时候注册多个,注意这里注册的顺序就代表拦截器执行的顺序。

同上,再编写一个MyHandlerInterceptor2操作,测试执行顺序:

<!--配置拦截器-->
<mvc:interceptors>
  <mvc:interceptor>
    <!--拦截器路径配置-->
    <mvc:mapping path="/**"/>
    <!--自定义拦截器类-->
    <bean class="com.lagou.interceptor.MyInterceptor1"></bean>
  </mvc:interceptor>
  <mvc:interceptor>
    <!--拦截器路径配置-->
    <mvc:mapping path="/**"/>
    <!--自定义拦截器类-->
    <bean class="com.lagou.interceptor.MyInterceptor2"></bean>
  </mvc:interceptor>
</mvc:interceptors>

5. 知识小结

拦截器中的方法说明如下:

JAVA SpringMVC实现自定义拦截器

Python 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python中集合类型(set)学习小结
Jan 28 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
使用Django和Python创建Json response的方法
Mar 26 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
详解python播放音频的三种方法
Sep 23 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
Python Pandas 删除列操作
Mar 16 #Python
Python实现批量自动整理文件
Mar 16 #Python
Pandas-DataFrame知识点汇总
Mar 16 #Python
python 安全地删除列表元素的方法
Mar 16 #Python
python turtle绘制多边形和跳跃和改变速度特效
Python中的turtle画箭头,矩形,五角星
Mar 16 #Python
Python学习之异常中的finally使用详解
Mar 16 #Python
You might like
PHP array 的加法操作代码
2010/07/24 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
jQuery Ajax文件上传(php)
2009/06/16 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
详解Python中expandtabs()方法的使用
2015/05/18 Python
python任务调度实例分析
2015/05/19 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
简单了解Python生成器是什么
2019/07/02 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
python 读取串口数据的示例
2020/11/09 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
电焊工工作岗位职责
2014/02/06 职场文书
经营目标管理责任书
2014/07/25 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
委托书范本格式
2019/04/18 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL