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

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

相关推荐
周星星日记4 天前
1.springmvc基础入门(一)
spring·springmvc
abcnull12 天前
springboot中过滤器配置使用
java·spring boot·后端·springmvc·过滤器
liubo666_15 天前
SpringMVC(结合源码浅析工作流程)
java·spring·springmvc
唐僧洗头爱飘柔952725 天前
【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
java·spring·mybatis·springmvc·动态代理·ioc容器·视图控制器
超级无敌永恒暴龙战士1 个月前
SpringMVC-执行流程
spring·servlet·springmvc
喝养乐多长不高1 个月前
Spring Web MVC基础理论和使用
java·前端·后端·spring·mvc·springmvc
magic 2451 个月前
SpringMVC——第三章:获取请求数据
java·数据库·springmvc
magic 2451 个月前
深入理解 Spring MVC:DispatcherServlet 与视图解析机制
java·servlet·状态模式·springmvc
magic 2451 个月前
第一章 初识SpringMVC
springmvc
magic 2451 个月前
SpringMVC——第五章:视图View
java·后端·springmvc