springMVC中的拦截器

文章目录

11、拦截器

11.1书写拦截器的步骤

一、首先需要在SpringMVC.xml中配置拦截器
xml 复制代码
<!--        配置拦截器-->
<mvc:interceptors>

    <!--        直接配置拦截器-->
    <!--        <bean class="com.qc.interceptor.FirstInterceptor"></bean>-->
    <!--        <ref bean="firstInterceptor"/>-->

    <!--        配置精确的拦截器-->
    <mvc:interceptor>
        <!--            配置拦截器的路径-->
        <mvc:mapping path="/**"/>
        <!--            配置需要排除的路径-->
        <mvc:exclude-mapping path="/test/abc"/>
        <mvc:exclude-mapping path="/"/>

        <ref bean="firstInterceptor"></ref>
    </mvc:interceptor>
    <!--精确配置拦截器二-->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/test/abc"/>
        <mvc:exclude-mapping path="/"/>
        <ref bean="secondInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

上面的代码中提到了两种方法配置拦截器(直接配置,精确配置),更推荐使用精确配置

二、处理完配置文件进行配置类的书写书写的类需要实现HandlerInterceptor接口

SpringMVC的拦截器有三个抽象方法

  1. preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示拦截或放行,返回true为放行,即可以调用控制方法;返回false表示拦截,即不可以调用控制器方法。

  2. postHandle:控制器方法执行之后执行postHandle()

  3. afterCompletion:处理万视图和模型数据,渲染视图完毕之后执行

java 复制代码
@Component
public class FirstInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("FirstInterceptor...preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("FirstInterceptor...postHandle");
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("FirstInterceptor...afterCompletion");
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

11.2多个拦截器的执行顺序

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

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

preHandle()会按照配置的顺序执行,而其它两个postHandle和afterCompletion会按照配置的逆序执行

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

而其它两个postHandle和afterCompletion会按照配置的逆序执行

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

preHandle()返回false和它之前的拦截器的preHanlde()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterCompletion会执行

相关推荐
JustHappy5 分钟前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本13 分钟前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处16 分钟前
Java从零到熟练(三):流程控制
java·开发语言·python
唐青枫39 分钟前
Java Optional 实战指南:优雅处理空值与链式转换
java
一起学开源41 分钟前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
云泽8081 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
逍遥德2 小时前
MQTT教程详解-04.SpringBoot集成MQTT(告别手动控制)
java·spring boot·物联网·中间件·iot·iotdb
语戚2 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
我命由我123453 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
星恒随风3 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习