Spring Boot中的拦截器

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拦截器就会对所有请求进行拦截了。我们也可以通过添加路径匹配规则等来控制拦截的请求。

应用场景

常见的用法:

  • 权限控制
  • 日志记录
  • 性能监控
posted @ 2023-08-02 18:29  冰块好冰  阅读(213)  评论(0)    收藏  举报