首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】2023年04月 Java教学课程 140-Spring MVC框架的拦截器

【愚公系列】2023年04月 Java教学课程 140-Spring MVC框架的拦截器

作者头像
愚公搬代码
发布于 2023-04-21 11:14:18
发布于 2023-04-21 11:14:18
16000
代码可运行
举报
文章被收录于专栏:历史专栏历史专栏
运行总次数:0
代码可运行

一、拦截器

1.拦截器概念

  • 请求处理过程解析
  • 拦截器( Interceptor)是一种动态拦截方法调用的机制
  • 作用:
    1. 在指定的方法调用前后执行预先设定后的的代码
    2. 阻止原始方法的执行
  • 核心原理: AOP思想
  • 拦截器链:多个拦截器按照一定的顺序,对原始被调用功能进行增强

拦截器VS过滤器

  • 归属不同: Filter属于Servlet技术, Interceptor属于SpringMVC技术
  • 拦截内容不同: Filter对所有访问进行增强, Interceptor仅针对SpringMVC的访问进行增强

2.自定义拦截器开发过程

实现HandlerInterceptor接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//自定义拦截器需要实现HandleInterceptor接口
public class MyInterceptor implements HandlerInterceptor {
    //处理器运行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("前置运行----a1");
        //返回值为false将拦截原始处理器的运行
        //如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行
        return true;
    }

    //处理器运行之后执行
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("后置运行----b1");
    }

    //所有拦截器的后置执行全部结束后,执行该操作
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        System.out.println("完成运行----c1");
    }

    //三个方法的运行顺序为    preHandle -> postHandle -> afterCompletion
    //如果preHandle返回值为false,三个方法仅运行preHandle
}

配置拦截器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/showPage"/>
        <bean class="com.itheima.interceptor.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

注意:配置顺序为先配置执行位置,后配置执行类

3.拦截器执行流程

4.拦截器配置与方法参数

4.1 前置处理方法

原始方法之前运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean preHandle(HttpServletRequest request,
                         HttpServletResponse response,
                         Object handler) throws Exception {
    System.out.println("preHandle");
    return true;
}
  • 参数
    • request:请求对象
    • response:响应对象
    • handler:被调用的处理器对象,本质上是一个方法对象,对反射中的Method对象进行了再包装
  • 返回值
    • 返回值为false,被拦截的处理器将不执行

4.2 后置处理方法

原始方法运行后运行,如果原始方法被拦截,则不执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void postHandle(HttpServletRequest request,
                       HttpServletResponse response,
                       Object handler,
                       ModelAndView modelAndView) throws Exception {
    System.out.println("postHandle");
}
  • 参数
    • modelAndView:如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整

4.3 完成处理方法

拦截器最后执行的方法,无论原始方法是否执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void afterCompletion(HttpServletRequest request,
                            HttpServletResponse response,
                            Object handler,
                            Exception ex) throws Exception {
    System.out.println("afterCompletion");
}
  • 参数
    • ex:如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理

5.拦截器配置项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<mvc:interceptors>
    <!--开启具体的拦截器的使用,可以配置多个-->
    <mvc:interceptor>
        <!--设置拦截器的拦截路径,支持*通配-->
        <!--/**         表示拦截所有映射-->
        <!--/*          表示拦截所有/开头的映射-->
        <!--/user/*     表示拦截所有/user/开头的映射-->
        <!--/user/add*  表示拦截所有/user/开头,且具体映射名称以add开头的映射-->
        <!--/user/*All  表示拦截所有/user/开头,且具体映射名称以All结尾的映射-->
        <mvc:mapping path="/*"/>
        <mvc:mapping path="/**"/>
        <mvc:mapping path="/handleRun*"/>
        <!--设置拦截排除的路径,配置/**或/*,达到快速配置的目的-->
        <mvc:exclude-mapping path="/b*"/>
        <!--指定具体的拦截器类-->
        <bean class="MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

6.多拦截器配置

责任链模式

责任链模式是一种行为模式

  • 特征:沿着一条预先设定的任务链顺序执行,每个节点具有独立的工作任务
  • 优势:
    • 独立性:只关注当前节点的任务,对其他任务直接放行到下一节点
    • 隔离性:具备链式传递特征,无需知晓整体链路结构,只需等待请求到达后进行处理即可
    • 灵活性:可以任意修改链路结构动态新增或删减整体链路责任
    • 解耦:将动态任务与原始任务解耦
  • 弊端:链路过长时,处理效率低下,可能存在节点上的循环引用现象,造成死循环,导致系统崩溃
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java学习之SpringMVC 拦截器
拦截器可以用在权限验证,比如在访问后台资源的时候,经过拦截器看请求有没有进行身份验证,身份验证通过后放行,否则跳转会后台登陆页面。
全栈程序员站长
2022/07/13
6160
SpringMVC 配置拦截器
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
4420
SpringMVC 拦截器的使用「建议收藏」
可以定义拦截器链,连接器链就是将拦截器按着顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
全栈程序员站长
2022/11/17
3210
SpringMVC 拦截器的使用「建议收藏」
拦截器「建议收藏」
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。
全栈程序员站长
2022/09/06
2950
拦截器「建议收藏」
java之spring mvc之拦截器
1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的。
Vincent-yuan
2019/09/11
8000
14-SpringMVC拦截器
SpringMVC中的拦截器作用类似Servlet中的Filter,用于对处理器进行预处理与后处理
Ywrby
2022/10/27
2610
14-SpringMVC拦截器
SpringMVC拦截器:给你的应用增添色彩
嗨,亲爱的小伙伴们!欢迎来到这段关于SpringMVC拦截器的奇妙之旅。今天我们要一探究竟,深入挖掘拦截器的神秘面纱,看看它是如何在你的应用中悄然发挥作用的。别怕,我会用最通俗易懂的语言,一步一步带你走进这个充满色彩的世界。
繁依Fanyi
2024/01/17
2020
Spring 详解(三)------- SpringMVC拦截器使用
在实际应用中,咱们一般都是通过实现 HandlerInterceptor 接口或者继承 HandlerInterceptorAdapter 抽象类,复写 preHandle()、postHandle() 和 afterCompletion()这 3 个方法来对用户的请求进行拦截处理的。
海向
2019/09/23
6040
springmvc的拦截器
作用: Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 用户可以自己定义一些拦截器来实现特定的功能。 拦截器和过滤器的区别: 过滤器是 servlet 规范中的一部分,任何 java web 工程都可以使用。 拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用。 过滤器在 url-pattern 中配置了/*之后,可以对所有要访问的资源拦截。 拦截器它是只会拦截访问的控制器方法,如果访问的是 jsp,html,css,image 或者 js 是不会进行拦 截的。 它也是 AOP 思想的具体应用。 我们要想自定义拦截器, 要求必须实现:HandlerInterceptor 接口。 编写jsp
暴躁的程序猿
2022/03/23
3060
springmvc的拦截器
【SSM – SpringMVC篇】09 SpringMVC拦截器Interceptor详解,多个拦截器的执行顺序,拦截器进行权限判断和日志记录,拦截器和过滤器的区别
Interceptor拦截器,是SpringMVC提供用来拦截发送给Controller层方法请求的拦截器。类似于filter 主要进行记录日志,判断用户是否登录,过滤权限(没有登录就跳转登录之类的)   拦截器和我们所学的过滤器是很相似的,只是范围不一样。
全栈程序员站长
2022/09/16
7500
【SSM – SpringMVC篇】09 SpringMVC拦截器Interceptor详解,多个拦截器的执行顺序,拦截器进行权限判断和日志记录,拦截器和过滤器的区别
万字长文带你彻底学会拦截器与过滤器
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
一只胡说八道的猴子
2021/02/04
9580
万字长文带你彻底学会拦截器与过滤器
Springmvc中的转发重定向和拦截器
Springmvc中的转发重定向和拦截器 可变参数 本人独立博客https://chenjiabing666.github.io 可变参数在设计方法时,使用数据类型...来声明参数类型,例如:public static void function(int... numbers)在实现方法体时,可变参数是作为数组来处理 public class Test { public static void main(String[] args) { System.out.println
爱撒谎的男孩
2018/05/10
3.9K1
Springmvc中的转发重定向和拦截器
快速学习-拦截器
第10章 拦截器 10.1 自定义拦截器概述 Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器可以实现HandlerInterceptor接口,或者可以继承 HandlerInterceptorAdapter 适配器类 ① preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果
cwl_java
2020/02/19
6850
快速学习-拦截器
SpringMVC 的处理拦截器0 目录1 Spring MVC拦截器流程图2 Spring Web MVC 的处理器拦截器3 拦截器配置4 拦截器Handler
0 目录 1 Spring MVC拦截器流程图 2 Spring Web MVC 的处理器拦截器 类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理 HandlerInt
JavaEdge
2018/05/16
8010
详述 Spring MVC 框架中拦截器 Interceptor 的使用方法
网络上关于Interceptor的文章,但感觉内容都大同小异,而且知识点零零散散,不太方便阅读。
全栈程序员站长
2022/08/28
2.1K0
Spring Web MVC 拦截器
  Spring Web MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是 AOP思想的具体实现。
Demo_Null
2020/09/28
6800
Spring Web MVC 拦截器
SpringMVC拦截器
mvc:mapping是你要映射的拦截路径 可以有多个 mvc:exclude-mapping 是你排除映射的拦截路径,也可以有多个 下面那个bean 就是你自定义的拦截器了
試毅-思伟
2018/09/06
8860
Spring学习笔记(十)——SpringMVC框架中的拦截器和异常处理
注意:配置多个拦截器需要在springmvc.xml在建一个<mvc:interceptors>,当设置多个拦截器后,执行的顺序如下:
不愿意做鱼的小鲸鱼
2022/09/24
4930
Spring学习笔记(十)——SpringMVC框架中的拦截器和异常处理
SpringMVC拦截器
Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
楠羽
2023/10/17
2470
SpringMVC拦截器
springmvc之配置拦截器拦截相应的请求
在<mvc:mapping path="/emps"/>中可以配置拦截的url地址。
西西嘛呦
2020/08/26
6350
springmvc之配置拦截器拦截相应的请求
相关推荐
Java学习之SpringMVC 拦截器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档