Spring Boot中的自定义拦截器[ADD HTTP REQUEST HEADER]

问题描述

我试图在Spring Boot应用程序中创建自定义拦截器,以在每个http请求中添加标头。

例如:
POSTMAN --[GET: http://some_url] --> INTERCEPTOR -- [ADD HEADER "ID"] --> RestController [GET HEADER ID].

我试图创建这样的拦截

@Component
public class LogRequestHandler implements ClientHttpRequestInterceptor {
private final Logger log = LoggerFactory.getLogger(LogRequestHandler.class);

  @Override
  public ClientHttpResponse intercept(HttpRequest httpRequest,byte[] bytes,ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
    String trackingId = RandomStringUtils.randomAlphanumeric(8);
    long timestamp = zoneddatetime.Now(ZoneOffset.UTC).toInstant().toEpochMilli();
    log.info("Request [{}] {} {}",trackingId,httpRequest.getmethod(),httpRequest.getURI());
    httpRequest.getHeaders().add("TRACKING_ID",trackingId);
    httpRequest.getHeaders().add("TIMESTAMP",String.valueOf(timestamp));
    return clientHttpRequestExecution.execute(httpRequest,bytes);
  }
} 

但是我不知道如何将其添加到spring配置中:(( 提前谢谢。

解决方法

在春季WebMvcConfigurerAdapter中,您将拥有专用的方法

public void addInterceptors(InterceptorRegistry registry)

因此您可以执行以下操作:

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

  @Autowired 
  HandlerInterceptor yourInterceptor;

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