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");
}
}
注册拦截器:
在配置类中实现 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
}
}
拦截器是 Spring MVC 特有的功能,运行在控制器层。拦截器通常用于处理日志记录、身份验证和修改模型属性等问题。
文章来源:https://dev.to/jottyjohn/interceptors-in-spring-boot-3fnp