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 06 Python
Python实现队列的方法
May 26 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
简单了解Java Netty Reactor三种线程模型
Apr 26 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 Python
PyTorch 导数应用的使用教程
Aug 31 Python
快速一键生成Python爬虫请求头
Mar 04 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中的正规表达式(一)
2006/10/09 PHP
php GeoIP的使用教程
2011/03/09 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
理解JavaScript原型链
2016/10/25 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
python opencv实现运动检测
2018/07/10 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
python中time.ctime()实例用法
2021/02/03 Python
历史专业学生的自我评价
2014/02/28 职场文书
意向书范文
2014/03/31 职场文书
安全教育演讲稿
2014/05/09 职场文书
无传销社区工作方案
2014/05/13 职场文书
优质服务演讲稿
2014/05/14 职场文书
绿色出行口号
2014/06/18 职场文书
自荐信怎么写
2015/03/04 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis