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之有容乃大的list(3)
Sep 15 Python
Python中的choice()方法使用详解
May 15 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
Python设计模式之代理模式简单示例
Jan 09 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
python中rb含义理解
Jun 18 Python
Python unittest生成测试报告过程解析
Sep 08 Python
详解PyTorch模型保存与加载
Apr 28 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仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
Angular封装表单控件及思想总结
2019/12/11 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python 基于opencv操作摄像头
2020/12/24 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
会计专业推荐信
2013/10/29 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
拓展训练激励口号
2014/06/17 职场文书
小学生校园广播稿
2014/09/28 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
小学运动会加油词
2015/07/18 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL