SpringMVC之拦截器

1.拦截器(Interceptor)

(1)拦截器概念

拦截器是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行

(2)拦截器作用

在指定的方法调用前后执行预先设定的代码和阻止原始方法的执行

(3)拦截器执行顺序

2.拦截器参数

参数 描述
HttpServletRequest request 请求对象
HttpServletResponse response 响应对象
Object handler 被调用的处理器对象,本质上是一个方法对象,对反射技术中的Method对象进行了再包装
ModelAndView modelAndView 如果处理器执行完成具有返回结果,可以读取到对应数据和页面信息,并进行调整
Exception ex 如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理

3.拦截器代码案例

(1)定义一个拦截器

定义一个类实现HandlerInterceptor接口

java 复制代码
package controller;

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

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

@Component // 自定义拦截器需要被SpringMVC配置类扫描到
public class ExampleInterceptor implements HandlerInterceptor {
    // 在原始方法之前执行的代码,其返回值表示是否执行原始方法中的代码
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("在原始方法之前执行的代码");
        return true;
    }

    // 在原始方法之后执行的代码
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("在原始方法之后执行的代码");
    }

    // 在postHandle之后执行的代码
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("在postHandle之后执行的代码");
    }
}

(2)设置拦截器拦截的控制器

实现WebMvcConfigurer接口的void addInterceptors(InterceptorRegistry registry)方法

java 复制代码
package config;

import controller.ExampleInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@ComponentScan("controller")
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer{
    @Autowired
    private ExampleInterceptor exampleInterceptor;

    // 定义具体的拦截器配置
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(exampleInterceptor)// 添加拦截器
                .addPathPatterns("/demo");// 该拦截器拦截的请求
    }
}

4.拦截器链

配置多个拦截器时,会形成拦截器链。拦截器链的运行顺序参照拦截器添加顺序为准。当拦截器中出现对控制器的拦截,该拦截器后续执行会终止但不影响前面拦截器的后续执行

相关推荐
我是大头鸟6 小时前
SpringMVC 使用thymeleaf 进行数据展示
java·springmvc·thymeleaf
爱喝一杯白开水4 天前
SpringMVC从入门到上手-全面讲解SpringMVC的使用.
java·spring·springmvc
V功夫兔7 天前
Spring_MVC 快速入门指南
java·笔记·spring·springmvc
岁岁岁平安11 天前
SpringMVC入门学习总结(2025.04.16)
java·spring·java-ee·mvc·springmvc
在努力的韩小豪22 天前
SpringMVC和SpringBoot是否线程安全?
spring boot·后端·springmvc·线程安全·bean的作用域
依旧很淡定1 个月前
05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)
springmvc·拦截器·静态资源
就改了1 个月前
SpringMVC 跨域问题两种常用解决方案
java·springmvc
一弓虽1 个月前
springmvc 框架学习
java·学习·spring·ssm·springmvc
字节源流1 个月前
【SpringMVC】常用注解:@MatrixVariable
springmvc
想要打 Acm 的小周同学呀2 个月前
SpringMVC执行的流程
springmvc·springmvc执行的流程