У меня есть веб-приложение, которое получает запросы, затем вызывает несколько API и возвращает ответ на основе этих API. Ничего экстраординарного.
Я пытаюсь достичь:
- Регистрация запросов и ответов моего приложения
- Регистрация каждого запроса и ответа моего приложения на каждый API
Мой подход заключался в создании фильтра для регистрации запросов и ответов моего приложения и перехватчика для регистрации вызовов API
Код фильтра и перехватчика mi выглядит следующим образом:
@Component
public class LoggingRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
FilterChain filterChain) throws ServletException, IOException {
CustomContentCachingRequestWrapper requestWrapper = new CustomContentCachingRequestWrapper(httpServletRequest);
ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(httpServletResponse);
logRequestInfo(requestWrapper);
filterChain.doFilter(requestWrapper, responseWrapper);
logResponseInfo(requestWrapper, responseWrapper);
responseWrapper.copyBodyToResponse();
}
...
}
public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
traceRequest(request, body);
ClientHttpResponse response = execution.execute(request, body);
traceResponse(response);
return response;
}
...
}
Но порядок записи нарушен, выглядит так:
- Запрос к приложению
- Запрос к API-1
- Ответ API-1
- Запрос к API-2
- Ответ приложения
- Ответ API-2
Почему журнал ответов API-2 после ответа приложения?
Является ли ClientHttpRequestInterceptor совершенно другим по сравнению с HandlerInterceptorAdapter и не ведет себя так, как на рисунке ниже?
http://mkjava.com/tutorial/images/interceptor.png
PD : То же самое происходит с окончательным журналом из CommonsRequestLoggingFilter