首页 新闻中心 技术资料备存中心 详情

Spring Boot 中的拦截器的使用和简单测试

2024-09-02

Spring Boot 中的拦截器是一种强大的机制,用于在请求处理的不同阶段执行自定义逻辑。以下是对 Spring Boot 拦截器的简要介绍:

1. 概念:

   拦截器是 Spring MVC 框架提供的,它可以在请求到达控制器之前和视图渲染之后执行自定义的处理逻辑。我们英特软件公司拦截器用的比较多,主要是以下用途:

2. 拦截器在我司项目中的用途:

   - 身份验证

   - 日志记录

   - 请求统计

   - 性能监控

   - 数据预处理

   -对于非法访问的控制,某个文件和路径不想让用户查看时,可以使用这个拦截器

3. 实现方式:

   通过实现 HandlerInterceptor 接口或继承 HandlerInterceptorAdapter 类来创建拦截器。

4. 关键方法:

   - preHandle(): 在请求处理之前调用

   - postHandle(): 在请求处理之后,视图渲染之前调用

   - afterCompletion(): 在整个请求处理完毕后调用

5. 配置:

   通过实现 WebMvcConfigurer 接口并重写 addInterceptors 方法来注册拦截器。

6. 执行顺序:

   可以配置多个拦截器,它们按照注册的顺序依次执行。

7. 与过滤器的区别:

   拦截器是基于 Java 反射机制的,而过滤器是基于函数回调的。拦截器只对 Controller 请求起作用,而过滤器则可以对所有请求起作用。


以下接合我司的代码,对这个功能进行详细说明:

首先,让我们创建一个拦截器,代码如下:

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class TimingInterceptor implements HandlerInterceptor {
    private ThreadLocal<Long> startTime = new ThreadLocal<>();
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        long start = System.currentTimeMillis();
        startTime.set(start);
        System.out.println("开始处理请求: " + request.getRequestURI());
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("请求处理完成,视图渲染前");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        long end = System.currentTimeMillis();
        long start = startTime.get();
        System.out.println("请求处理完成: " + request.getRequestURI() + ", 耗时: " + (end - start) + "ms");
        startTime.remove();
    }
}

接下来,我们需要配置这个拦截器:

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 WebConfig implements WebMvcConfigurer {
    private final TimingInterceptor timingInterceptor;
    public WebConfig(TimingInterceptor timingInterceptor) {
        this.timingInterceptor = timingInterceptor;
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(timingInterceptor);
    }
}

这个示例中的拦截器做了以下几件事:

1. 在 `preHandle` 方法中,记录请求开始处理的时间。

2. 在 `postHandle` 方法中,简单地打印一条消息。

3. 在 `afterCompletion` 方法中,计算并打印请求处理的总时间。

配置类 `WebConfig` 将拦截器添加到 Spring MVC 的拦截器链中。

使用这个拦截器后,每次处理请求时,控制台都会输出类似以下的信息:

开始处理请求: /api/example
请求处理完成,视图渲染前
请求处理完成: /api/example, 耗时: 50ms

这个简单的示例展示了如何创建和配置一个基本的拦截器。您可以根据具体需求修改或扩展这个拦截器,例如添加日志记录、权限检查等功能。


以上内容即为我司经常使用的拦截器功能,如果您有不明白的,可以给我们网站管理员写邮件,以方便我们回复您的消息:

邮箱:KF@zzint.com

contact us

服务热线:0632-52721230632-5271123

业务咨询:1396946888218006320170

营销中心:山东省 枣庄市 市中区 中坚1878 A406室

邮箱:kf@zzint.com

微信客服
在线联系
13969468882
返回顶部