发布于 2026-01-06 0 阅读
0

Spring Boot DEV 的全球展示挑战赛(由 Mux 呈现):展示你的项目!

Spring Boot 中的拦截器

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

Spring Boot 中的拦截器通常用于在 HTTP 请求到达控制器之前拦截和操作 HTTP 请求,或在响应发送到客户端之前拦截和操作响应。

实现拦截器的步骤:
创建拦截器类:

实现 HandlerInterceptor 接口或扩展 HandlerInterceptorAdapter 类。根据需要重写 preHandle、postHandle 和 afterCompletion 等方法。

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // Code to execute before the controller method is invoked
        System.out.println("Pre Handle method is called");
        return true; // If false, the request is not further processed
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // Code to execute after the controller method is invoked, but before the view is rendered
        System.out.println("Post Handle method is called");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // Code to execute after the complete request has finished
        System.out.println("After Completion method is called");
    }
}
Enter fullscreen mode Exit fullscreen mode

注册拦截器:

在配置类中实现 WebMvcConfigurer 接口,并重写 addInterceptors 方法来注册拦截器。

import org.springframework.beans.factory.annotation.Autowired;
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 {

    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/api/**"); // Specify paths to apply the interceptor
    }
}

Enter fullscreen mode Exit fullscreen mode

拦截器是 Spring MVC 特有的功能,运行在控制器层。拦截器通常用于处理日志记录、身份验证和修改模型属性等问题。

文章来源:https://dev.to/jottyjohn/interceptors-in-spring-boot-3fnp