【SpringMVC】SpringMVC拦截器

本文详细介绍了如何在SpringMVC中通过配置类实现WebMvcConfigurer接口,注册拦截器并设置拦截路径,以及如何实现HandlerInterceptor接口以在请求处理不同阶段进行操作。流程包括拦截器的添加和SpringMVC的请求处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:准入器配置

1.编写配置类。

2.实现WebMvcConfigurer接口

3.重写addInterceptors(InterceptorRegistry registry) 方法

4.声明类注解为配置类:@Configuration

5.编写拦截器

6.在配置类中写入拦截器。

在 Spring MVC 中,可以通过配置文件或者 Java 代码来注册拦截器。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Bean
    public A initA() {
        return new A();
    }
    @Bean
    public B initB() {
        return new B();
    }
    @Bean
    public C initC() {
        return new C();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(A()).addPathPatterns("/**");// 添加拦截器,并设置拦截路径
        registry.addInterceptor(B()).addPathPatterns("/**");// 添加拦截器,并设置拦截路径
        registry.addInterceptor(C()).addPathPatterns("/**");// 添加拦截器,并设置拦截路径
    }
}

我们创建了一个名为 WebMvcConfig 的配置类,并实现了 WebMvcConfigurer 接口。通过重写 addInterceptors 方法,我们可以向 Spring MVC 注册拦截器。在这个方法中,我们调用 registry 对象的 addInterceptor 方法来添加自定义的拦截器 A,B,C,并使用 addPathPatterns 方法来设置拦截的路径,这里设置为 "/*" 表示拦截所有请求。

通过这样的配置,Spring MVC 将会在处理请求时自动调用我们定义的拦截器,并根据设置的路径进行拦截处理。

二:实现拦截器

在 Spring MVC 中,可以通过实现 HandlerInterceptor 接口来定义拦截器,并在请求处理的不同阶段进行预处理、后处理和完成处理。以下是一个简单的 Java 代码示例,演示了如何实现一个自定义的 HandlerInterceptor:

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

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

public class CustomInterceptor implements HandlerInterceptor {

    // 在请求处理之前进行调用(Controller 方法调用之前)
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("Pre Handle method is Calling");
        return true; // 如果返回 false,则请求不会继续向下执行,即拦截请求
    }

    // 请求处理之后进行调用(Controller 方法调用之后)
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("Post Handle method is Calling");
    }

    // 请求完成后进行调用,即视图渲染完毕或者调用方异常(在拦截器链中的所有拦截器都执行完毕时)
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) throws Exception {
        System.out.println("Request and Response is completed");
    }
}

三:拓展-SpringMvC流程

1.发起请求-》前端控制器DispatcherSevlet

2.前端控制器DispatcherSevlet请求处理器映射器HandlerMapping查找Handler

3.处理器映射器HandlerMapping获取处理器Handler,并返回给前端控制器DispatcherSevlet

4.前端控制器DispatcherSevlet请求处理器适配器HandlerAdapter处理Handler

5.处理器适配器HandlerAdapter调用方法执行Handler,执行业务逻辑(Controller->Service->dao->sql->Controller)

6.Handler处理器返回ModelAndView给处理器适配器HandlerAdapter

7.处理器适配器HandlerAdapter返回ModelAndView给前端控制器DispatcherServlet

8.DispatcherServlet请求视图解析器ViewAResolver进行视图解析

9.视图解析器ViewResolver解析视图,ViewResolver返回视图给DispatcherServlet

10.DispatcherServlet请求View进行视图渲染

11.返回渲染后的视图给DispatcherServlet

12.DispatcherServlet响应请求

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值