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 相关文章推荐
Python解释执行原理分析
Aug 22 Python
python中的reduce内建函数使用方法指南
Aug 31 Python
Python性能优化技巧
Mar 09 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
Python正则表达式常用函数总结
Jun 24 Python
利用Django模版生成树状结构实例代码
May 19 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
Python 生成VOC格式的标签实例
Mar 10 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
python 调整图片亮度的示例
Dec 03 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 preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php中session与cookie的比较
2015/01/27 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
Python使用while循环花式打印乘法表
2019/01/28 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
django页面跳转问题及注意事项
2019/07/18 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
幼师自我鉴定范文
2013/10/01 职场文书
工程项目经理岗位职责
2013/12/15 职场文书
小学家长通知书评语
2014/12/31 职场文书
红色电影观后感
2015/06/18 职场文书
校园广播稿范文
2015/08/19 职场文书
小学班长竞选稿
2015/11/20 职场文书
合作合同协议书
2016/03/21 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS