拦截器在Controller之前执行。
用于权限校验,日志记录,性能监控
在SpringBoot中使用
- 创建拦截器类:首先,创建一个Java类来实现拦截器逻辑。拦截器类应该实现Spring提供的HandlerInterceptor接口。
- 实现拦截器方法:拦截器接口通常定义了三个方法:
- preHandle 在方法调用之前执行逻辑,例如记录请求的开始时间
- postHandle 在方法调用之后执行逻辑,但在视图渲染之前执行
- afterCompletion 在整个请求处理完成后执行,用于资源清理等工作
你可以在这些方法中添加你需要的逻辑,比如在请求处理之前进行权限验证、在请求处理后记录日志等。
3.注册拦截器:将拦截器注册到Spring Boot应用程序中,使其生效。你可以通过配置类或者实现WebMvcConfigurer接口来完成拦截器的注册。
1.创建拦截器类实现HandlerInterceptor接口:
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在方法调用之前执行逻辑,例如记录请求的开始时间
System.out.println("Request received at: " + new Date());
return true; // 放行请求
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在方法调用之后执行逻辑,但在视图渲染之前执行
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求处理完成后执行,用于资源清理等工作
}
}
2.注册拦截器:在Spring Boot中,可以通过配置类来注册拦截器。
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 {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册拦截器,并指定拦截的URL路径
registry.addInterceptor(new LoggingInterceptor()).addPathPatterns("/**");
}
}
在上述示例中,我们创建了一个LoggingInterceptor拦截器,并且使用addInterceptor方法将其添加到拦截器注册表中,然后通过addPathPatterns指定要拦截的URL路径为"/**",表示拦截所有请求。
这样,在每个请求被处理前,都会先执行LoggingInterceptor中的preHandle方法,实现记录请求开始时间的功能。