首页 > 解决方案 > Spring Web - AsyncHandlerInterceptor 中的两个连续 HTTP 请求,而 HTTP 500?

问题描述

AsyncHandlerInterceptor在我的 Spring 应用程序(问题的简化版本)中有这个,用于将所有 HTTP 请求记录到数据库中。

@Component
public class LoggingInterceptor implements AsyncHandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    return true;
  }

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

    // Logging HTTP request into database here...

  }

}  

在实现中激活拦截器WebMvcConfigurer

@Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(loggingInterceptor).order(Integer.MAX_VALUE - 1);
}

它按我的预期工作,但是当目标控制器抛出异常(HTTP 500)时,拦截器会记录两个请求而不是一个。第一个是 HTTP 200 OK,第二个(紧跟在第一个之后)正确记录 HTTP 500 Internal Server Error。我想避免第一个。

问:拦截器记录两个请求是否有任何应用原因或我的配置错误?

标签: javaspring-bootinterceptor

解决方案


推荐阅读