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 字典(Dictionary)操作详解
Mar 11 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
python闭包与引用以及需要注意的陷阱
Sep 18 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读取xml实例代码
2010/01/28 PHP
php生成excel文件的简单方法
2014/02/08 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
js表格分页实现代码
2009/09/18 Javascript
js变换显示图片的实例
2013/04/16 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
ReactRouter的实现方法
2021/01/25 Javascript
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
行政管理人员精品工作推荐信
2013/11/04 职场文书
社区母亲节活动方案
2014/03/05 职场文书
分公司经理任命书
2014/06/05 职场文书
预备党员半年考察意见
2015/06/01 职场文书
十七岁的单车观后感
2015/06/12 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
python 闭包函数详细介绍
2022/04/19 Python
MySQL事务的隔离级别详情
2022/07/15 MySQL