12、SpringMVC之拦截器

这篇具有很好参考价值的文章主要介绍了12、SpringMVC之拦截器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

12.1、环境搭建

创建名为spring_mvc_interceptor的新module,过程参考9.1节和9.5节

12.1.1、页面请求示例

12、SpringMVC之拦截器

<a th:href="@{/test/hello}">测试拦截器</a>

12.1.2、控制器方法示例

12、SpringMVC之拦截器

    @RequestMapping("/test/hello")
    public String testHello(){
        return "success";
    }

12.2、拦截器的入门示例

12.2.1、创建拦截器

12、SpringMVC之拦截器

package online.liaojy.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author liaojy
 * @date 2023/11/7 - 20:57
 */
// SpringMVC 中的拦截器要实现 HandlerInterceptor 接口
public class AAAInterceptor implements HandlerInterceptor {

    // preHandle()方法在控制器方法执行之前执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("AAAInterceptor-->preHandle()");

        // 返回true表示不拦截,即执行控制器方法
        // 返回false表示拦截,即不再执行控制器方法
        return true;
    }

    // postHandle()方法在控制器方法执行之后执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("AAAInterceptor-->postHandle()");
    }

    // afterCompletion()方法在渲染完视图之后执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("AAAInterceptor-->afterCompletion()");
    }

}

12.2.2、配置拦截器

与自定义的过滤器一样,自定义的拦截器也要配置后才能生效;

过滤器是服务器中的组件,所以配置到 web.xml 中;

拦截器是 springmvc 中的组件,因此要配置到 springmvc 的配置文件中。

12、SpringMVC之拦截器

    <mvc:interceptors>
        <bean class="online.liaojy.interceptor.AAAInterceptor"></bean>
    </mvc:interceptors>

12.2.3、测试效果

12、SpringMVC之拦截器

12、SpringMVC之拦截器

因为在配置拦截器时,没有指定要拦截的路径,所以访问任何DispatcherServlet处理的资源时,拦截器都会执行。

12、SpringMVC之拦截器

12、SpringMVC之拦截器

12、SpringMVC之拦截器

12.3、拦截器的注解配置

除了使用 bean 标签通过全限定类名来配置拦截器,还可以通过 ref 标签引用已存在的 bean 组件来配置拦截器

12.3.1、将拦截器标识为bean组件

12、SpringMVC之拦截器

因为拦截器不属于持久层、业务层和控制层,所以应该用 @Component 注解将其标识为一个 bean 组件

@Component

12.3.2、通过ref标签引用配置拦截器

12、SpringMVC之拦截器

    <mvc:interceptors>
        <ref bean="AAAInterceptor"></ref>
    </mvc:interceptors>

12.4、拦截器的进阶示例

通过上述的方式来配置拦截器,会对 DispatcherServlet 所处理的所有请求都进行拦截;

在实际情况中,可能只需要拦截部分请求,或排除部分请求的拦截。

12.4.1、精确的拦截配置

12、SpringMVC之拦截器

    <mvc:interceptors>
        <mvc:interceptor>
            <!--通过mvc:mapping设置要拦截的请求,可以设置多个;用通配符时,/*表示只拦截一级路径的,/**才表示拦截任意的-->
            <mvc:mapping path="/**"/>
            <!--通过mvc:exclude-mapping设置要排除拦截的请求,可以设置多个 -->
            <mvc:exclude-mapping path="/abc"/>
            <!--设置实行精确拦截规则的拦截器-->
            <bean class="online.liaojy.interceptor.AAAInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

12.4.2、测试效果

12、SpringMVC之拦截器

12、SpringMVC之拦截器

如上图所示,拦截了一级路径的请求

12、SpringMVC之拦截器

12、SpringMVC之拦截器

12、SpringMVC之拦截器

如上图所示,拦截了二级路径的请求

12、SpringMVC之拦截器

12、SpringMVC之拦截器

如上图所示,没有拦截/abc的请求

注意:为实现演示效果,本例已在springmvc配置文件中设置了关于/abc请求的视图控制器

<mvc:view-controller path="/abc" view-name="success"></mvc:view-controller>

12.5、多个拦截器的执行顺序

12.5.1、创建另一个拦截器

12、SpringMVC之拦截器

package online.liaojy.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author liaojy
 * @date 2023/11/9 - 7:27
 */
public class BBBInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("BBBInterceptor-->preHandle()");
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("BBBInterceptor-->postHandle()");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("BBBInterceptor-->afterCompletion()");
    }
}

12.5.2、配置多个拦截器

12、SpringMVC之拦截器

    <mvc:interceptors>
        <bean class="online.liaojy.interceptor.AAAInterceptor"></bean>
        <bean class="online.liaojy.interceptor.BBBInterceptor"></bean>
    </mvc:interceptors>

12.5.3、情况一

  • 如果每个拦截器的preHandle()都返回true

  • 此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关

  • preHandle()会按照配置的顺序执行,而postHandle()和afterCompletion()会按照配置的反序执行

12、SpringMVC之拦截器

12、SpringMVC之拦截器

注意:此时 AAAInterceptor 和 BBBInterceptor 拦截器的 preHandle() 方法返回值都是 true

12.5.4、情况二

  • 如果某个拦截器的preHandle()返回了false

  • 返回false的拦截器和它之前的拦截器的preHandle()都会执行

  • 所有postHandle()都不执行

  • 返回false的拦截器之前的拦截器的afterCompletion()会执行

12、SpringMVC之拦截器

12、SpringMVC之拦截器

注意:此时 AAAInterceptor 拦截器的 preHandle() 方法返回值为true,而 BBBInterceptor 拦截器的为 false

12.5.5、执行顺序流程图

12、SpringMVC之拦截器

12.6、相关拓展

12.6.1、拦截器与过滤器的区别

  • 过滤器是 Tomcat 服务器中的对象,拦截器是 SpringMVC 框架中的对象;

  • 过滤器实现的是 Java 中的 Filter 接口,拦截器实现的是 SpringMVC 中的 HandleInterceptor 接口;

  • 过滤器配置在 web.xml 中,拦截器配置在 SpringMVC 配置文件中;

  • 过滤器在拦截器之前执行;

  • 过滤器是一个执行时间点;拦截器是三个执行时间点;

  • 过滤器除了对动态资源进行过滤之外,还可以对静态资源(HTML、CSS、JS、图片等)进行过滤;

  • 拦截器侧重对控制器方法进行拦截处理,如果一个请求不能被DispatcherServlet接收,那这个请求也不会被拦截器处理。

12.6.2、拦截器的应用场景

  • 权限校验:用户在访问某资源时,可以使用拦截器对用户请求进行拦截,
    判断当前用户有没有登录,如果没有登录则强制回到登录页面进行登录。

  • 性能监控:如果想统计用户访问某个控制器方法的时间,可以使用拦截器对控制器方法进行前置拦截和后置拦截,
    在前置拦截器里面记录用户访问资源的起始时间,在后置拦截器里面记录用户访问资源的结束时间,
    两个时间之差就是当前用户访问控制器方法是总时长。

  • 日志记录:记录请求资源的日志信息,比如请求方式、请求参数、请求响应等,都可以通过拦截器来实现信息记录。文章来源地址https://www.toymoban.com/news/detail-750162.html

到了这里,关于12、SpringMVC之拦截器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC拦截器 (Interceptor)

            Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。         拦截器依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的

    2024年01月22日
    浏览(35)
  • 一文学会 SpringMVC 拦截器

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SSM 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:一文学会 SpringM

    2024年02月02日
    浏览(36)
  • SpringMVC Day 10 : 拦截器

    拦截器是Spring MVC框架提供的一种强大的机制,用于在请求到达控制器之前或之后进行预处理和后处理。它可以拦截并处理请求,对请求进行必要的修改或验证,以及在请求返回给客户端之前进行额外的操作。拦截器可以帮助我们实现各种需求,如身份验证、日志记录、性能监

    2024年02月06日
    浏览(31)
  • SpringMVC的拦截器(Interceptor)

    对于拦截器这节的知识,我们需要学习如下内容: 拦截器概念 入门案例 拦截器参数 拦截器工作流程分析 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如果是

    2024年02月09日
    浏览(32)
  • springmvc统一异常处理拦截器

    使用@RestControllerAdvice+@ExceptionHandler实现 也可以使用@ControllerAdvice+@ResponseBody+@ExceptionHandler实现 创建一个异常处理的类,放在config包下  组件类:  也可以让不同的异常返回不同的结果,捕获什么异常由@ExceptionHandler的value属性决定,传入一个类对象(可以通过反射获得)  

    2024年02月15日
    浏览(32)
  • 第9章:SpringMVC的拦截器

    1. 拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件进行配置 ①创建拦截器,继承接口HandlerInterceptor.  ②在springMVC配置文件里配置拦截器   !-- 拦截所有的请求,除了 /-- 2. 拦截器的

    2024年02月08日
    浏览(28)
  • SpringMVC下半篇之拦截器

    拦截器 文件上传 异常处理器 ssm整合 ​ Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。 ​ 拦截器依赖于web框架,在实现上基于Java的反射机制,属于面向

    2024年01月23日
    浏览(74)
  • SpringMVC拦截器和异常处理机制

    SpringMVC拦截器类似于过滤器,用于进行预处理和后处理 将拦截器按照一定顺序连接成一条链,就是拦截器链 创建拦截器类实现HandlerInterceptor接口 配置拦截器 测试拦截器的拦截效果 三个方法的执行:在配置文件中依次配置两个拦截器分别为1和2,则执行顺序是:1的 preHandle

    2024年02月16日
    浏览(39)
  • SpringMVC中拦截器的简单使用

    步骤一:创建拦截器类 首先,我们需要创建一个拦截器类,该类需要实现 HandlerInterceptor 接口。这个接口定义了三个方法,分别在请求处理前、请求处理后和视图渲染后执行。 步骤二:创建配置类 上述配置类使用了 @Configuration 注解,表示这是一个配置类。通过 @Bean 注解将

    2024年01月17日
    浏览(32)
  • 【SpringMVC】拦截器&JSR303的使用

    目录 一、JSR303 1.1.什么是JSR303 1.2.为什么使用JSR303 1.3.常用注解 1.4.@Validated与@Valid区别 1.5.JSR快速入门 1.5.1.导入依赖 1.5.2.配置校验规则 1.5.3.入门案例 二、拦截器 2.1什么是拦截器 2.2.拦截器与过滤器 2.3.应用场景 2.4.拦截器快速入门 2.4.1.入门案例 2.4.2.拦截器工作原理 2.5.拦截器

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包