Spring Boot中的拦截器
什么时拦截器
Spring Boot中使用拦截器在Spring Boot中,我们可以通过拦截器(Interceptor)对控制器方法的执行进行拦截,实现预处理和后处理的功能。
常见的用途有:日志记录、权限校验、性能监控等。
实现一个拦截器需要实现HandlerInterceptor接口,
该接口有三个方法:
- preHandle():控制器方法执行前调用,如果返回true则继续执行下一个拦截器和控制器方法,如果返回false则不会继续执行。
- postHandle():控制器方法执行后调用,在视图渲染前调用。
- afterCompletion():整个请求结束后调用,在视图渲染后调用。
举个例子
下面是一个简单的日志拦截器例子:
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Request to : " + request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("Response status : " + response.getStatus());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("Request completed");
}
}
要注册拦截器,需要在Spring Boot配置中注册bean并添加@InterceptorRegistry注解:
@Configuration
public class InterceptorConfig {
@Bean
public LogInterceptor logInterceptor() {
return new LogInterceptor();
}
@InterceptorRegistry
public void registerInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor());
}
}
这样,LogInterceptor拦截器就会对所有请求进行拦截了。我们也可以通过添加路径匹配规则等来控制拦截的请求。
应用场景
常见的用法:
- 权限控制
- 日志记录
- 性能监控