SpringMVC-08-拦截器

1、拦截器概述

在SpringMVC框架中,处理器拦截器扮演着与Servlet过滤器(Filter)相似的角色,它们负责对处理器(Handler)进行预处理和后处理。开发者可以自定义拦截器以实现特定的业务需求。

过滤器与拦截器的主要区别:

  • 过滤器
    • 是servlet规范的一部分,适用于任何JavaWeb项目。
    • 通过在url-pattern中配置/*,可以对所有访问的资源进行过滤。
  • 拦截器
    • 是SpringMVC特有的,仅在SpringMVC项目中可用。
    • 仅拦截进入SpringMVC框架的请求,即进入DispatcherServlet的请求。
    • 对于.jsp等资源请求,拦截器不会生效,因为这些请求并未进入DispatcherServlet,而是直接由Tomcat的JspServlet处理。

拦截器是面向切面编程(AOP)思想的实践体现。

2、拦截器使用

自定义拦截器

如何实现自定义拦截器呢?首先,需要实现HandlerInterceptor接口。

public interface HandlerInterceptor {

    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}
  • preHandle:在处理器执行之前执行。
    • 返回true:继续执行下一个拦截器或处理器。
    • 返回false:中断请求处理链,需要自行处理请求和响应。
  • postHandle:在处理器执行之后,视图解析器解析视图之前执行。
    • 可以修改ModelAndView来控制模型数据和即将跳转的视图(仅限于返回逻辑视图名的处理器)。
  • afterCompletion:在请求处理完成后执行(即视图渲染后)。
    • 无论处理器是否正常执行(可能抛出异常),此方法都会执行。
    • 类似于try-catch中的finally,常用于资源清理和异常处理。

自定义拦截器MyInterceptor

public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
        System.out.println("------------preHandle------------");

        return !"false".equals(httpServletRequest.getParameter("status"));
    }

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("------------postHandle------------");
    }

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("------------afterCompletion------------");
        System.out.println(e);
        if (e != null)
            httpServletRequest.getRequestDispatcher("/").forward(httpServletRequest, httpServletResponse);
    }
}

配置拦截器

在Spring的配置文件中定义拦截器:



    
        
        
        
        
        
        
        
    

  • mvc:mapping:定义拦截器映射的路径。
  • mvc:exclude-mapping:在映射拦截路径中排除的路径。
  • bean:配置的拦截器类。

测试

添加Controller

@RestController
public class TestController {

    @RequestMapping("test1")
    public String test1() {
        System.out.println("Handler执行");
        return "hello";
    }
}
  • 拦截器拦截:后续处理链不会执行。

  • 拦截器放行:请求正常处理。

  • 处理器出现异常:postHandle不会执行,异常被afterCompletion捕获,并由afterCompletion处理请求。

3、拦截器执行顺序

添加MyInterceptor2

```java
public class MyInterceptor2 implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
System.out.println("------------preHandle-2------------");
return true;
}

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4281.html

(0)
LomuLomu
上一篇 2024 年 12 月 24 日 下午2:41
下一篇 2024 年 12 月 24 日 下午2:41

相关推荐

  • IntelliJ IDEA激活破解补丁下载(IDEA永久激活破解)

    IDEA最新永久激活破解教程:https://www.it1024doc.com/4100.html 破解补丁下载 因为提取的人数比较多,导致分享的百度网盘链接容易被封: 所以需要下载破解补丁的,扫描下方公众号,关注后,发送关键字:0622 即可免费无套路的获取破解补丁!

    2024 年 6 月 22 日
    10.3K00
  • 华为OD机试E卷 –跳房子I–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 Java算法源码 python算法源码 c算法源码 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏。游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格。跳房子的过程中,可以向前跳,也可以向后跳。假设房子的总格数是count,小红每回合可能连续跳的步教都放在数组steps中,请…

    未分类 2025 年 1 月 19 日
    81500
  • Java StampedLock:实现原理与最佳实践

    Java StampedLock:实现原理与最佳实践 1. 引言 2. StampedLock概述 2.1 什么是StampedLock? 2.2 核心特性 3. StampedLock的三种模式详解 3.1 写锁(Write Lock) 3.2 悲观读锁(Pessimistic Read Lock) 3.3 乐观读(Optimistic Read) 4. …

    2025 年 1 月 6 日
    64800
  • 2026国内ChatGPT Pro代充开通指南

    国内ChatGPT Pro代充开通指南,说明Pro订阅适用人群、支付准备和验收方式。

    未分类 2026 年 5 月 18 日
    9500
  • 什么是南北向流量和东西向流量?

    在现代云计算和微服务架构中,南北向流量与东西向流量是两种至关重要的网络流量模式。 南北向流量(North-South Traffic) 定义:南北向流量指的是穿越系统边界的流量,通常是从外部环境进入系统内部或从系统内部向外传输的数据流,例如用户通过浏览器或移动应用访问Web服务或API。 特点:这种流量模式涉及跨越网络边界的通信,如从外部网络进入内部网络,或…

    未分类 2024 年 12 月 24 日
    69100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信