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接收多播数据的代码
Mar 01 Python
简单介绍Python中的readline()方法的使用
May 24 Python
简介Django中内置的一些中间件
Jul 24 Python
python实现RSA加密(解密)算法
Feb 17 Python
python 判断网络连通的实现方法
Apr 22 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
使用Python实现画一个中国地图
Nov 23 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
利用Python批量识别电子账单数据的方法
Feb 08 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代码
2008/04/09 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
优化PHP程序的方法小结
2012/02/23 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHPMailer发送邮件
2016/12/28 PHP
Laravel下生成验证码的类
2017/11/15 PHP
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
nodejs初始化init的示例代码
2018/10/10 NodeJs
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
Python中max函数用法实例分析
2015/07/17 Python
python编程羊车门问题代码示例
2017/10/25 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
消防先进事迹材料
2014/02/10 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
责任书范本大全
2015/05/11 职场文书
监护人证明
2015/06/19 职场文书
同事离别感言
2015/08/04 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技