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 相关文章推荐
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
解决Django生产环境无法加载静态文件问题的解决
Apr 23 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
学习Django知识点分享
Sep 11 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
python 实现简易的记事本
Nov 30 Python
Python 匹配文本并在其上一行追加文本
May 11 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跨服务器访问方法小结
2015/05/12 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
简单了解python单例模式的几种写法
2019/07/01 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
python爬虫可以爬什么
2020/06/16 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
自荐信格式范文
2013/10/07 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
维稳工作情况汇报
2014/10/27 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL