弹簧启动添加 http 请求拦截器

2022-08-31 07:54:39

在 Spring Boot 应用程序中添加 HttpRequest 拦截器的正确方法是什么?我想做的是为每个http请求记录请求和响应。

Spring Boot 文档根本不涵盖此主题。(http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/)

我发现了一些关于如何对旧版本的spring执行相同操作的Web示例,但这些示例适用于appplicationcontext.xml。请帮忙。


答案 1

由于您使用的是Spring Boot,因此我认为您更愿意在可能的情况下依靠Spring的自动配置。要添加其他自定义配置(如拦截器),只需提供 的配置或 Bean。WebMvcConfigurerAdapter

下面是一个配置类的示例:

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

  @Autowired 
  HandlerInterceptor yourInjectedInterceptor;

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(...)
    ...
    registry.addInterceptor(getYourInterceptor()); 
    registry.addInterceptor(yourInjectedInterceptor);
    // next two should be avoid -- tightly coupled and not very testable
    registry.addInterceptor(new YourInterceptor());
    registry.addInterceptor(new HandlerInterceptor() {
        ...
    });
  }
}

注意:如果要保留 mvc 的 Spring Boots 自动配置,请不要使用 @EnableWebMvc 对此进行注释。


答案 2

WebMvcConfigurerAdapter将在 Spring 5 中弃用。从其Javadoc:

@deprecated从5.0开始{@link WebMvcConfigurer}具有默认方法(由Java 8基线实现),并且可以直接实现而无需此适配器

如上所述,您应该做的是实现和重写方法。WebMvcConfigureraddInterceptors

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyCustomInterceptor());
    }
}

推荐