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.拦截器链

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

相关推荐
阿华的代码王国16 天前
【Spring项目】表白墙,留言板项目的实现
java·springmvc·表白墙
IT机器猫18 天前
SpringMvc完整知识点二(完结)
java·ssm·springmvc
森屿Serien19 天前
SpringMVC
mvc·springmvc
耀耀_很无聊1 个月前
第13章 全注解开发
springmvc
耀耀_很无聊1 个月前
第11章 Spring MVC执行流程
java·spring·mvc·springmvc
cooldream20091 个月前
SpringMVC 执行流程详解
java·spring·springmvc
ModelBulider1 个月前
SpringMVC应用专栏介绍
java·开发语言·后端·spring·springmvc
楠寻寻1 个月前
Spring、SpringMVC、SpringBoot、Mybatis小结
spring boot·spring·mybatis·springmvc
ModelBulider1 个月前
十四、SpringMVC的执行流程
java·开发语言·后端·spring·springmvc
阑梦清川1 个月前
SpringMVC案例学习(一)--计算器设计&&登录页面设计
java·登录页面·springmvc·案例计算器