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基本数据类型
Sep 26 Python
Python的argparse库使用详解
Oct 09 Python
Django框架视图函数设计示例
Jul 29 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
python tkinter基本属性详解
Sep 16 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
Python while true实现爬虫定时任务
Jun 08 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
如何利用python发送邮件
Sep 26 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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 checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
arguments对象
2006/11/20 Javascript
表单内同名元素的控制
2006/11/22 Javascript
理解JS事件循环
2016/01/07 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
python字典一键多值实例代码分享
2019/06/14 Python
python利用tkinter实现屏保
2019/07/30 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
python wsgiref源码解析
2021/02/06 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
医院护理人员的自我评价分享
2013/10/04 职场文书
高中生自我评价个人范文
2013/11/09 职场文书
学校班班通实施方案
2014/06/11 职场文书
上下班时间调整通知
2015/04/23 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
《窃读记》教学反思
2016/02/18 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
Go语言 详解net的tcp服务
2022/04/14 Golang