ClientHttpRequestInterceptor

ClientHttpRequestInterceptor는 HTTP 요청/응답을 가로채서(intercept) 추가 로직을 실행할 수 있는 인터페이스입니다.

intercept()를 구현하면 요청 전처리, 후처리를 할 수 있습니다.

@FunctionalInterface
public interface ClientHttpRequestInterceptor {
	ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
			throws IOException;
}
  1. HttpRequest request
  2. byte[] body
  3. ClientHttpRequestExecution execution

주요 사용 사례 - 로깅

ClientHttpRequestInterceptor 를 구현합니다.

@Slf4j
public class RestClientLoggingInterceptor implements ClientHttpRequestInterceptor {

    @Override
    @NonNull
    public ClientHttpResponse intercept(HttpRequest request, @NonNull byte[] body, ClientHttpRequestExecution execution) throws IOException {
        LOGGER.info("→ Request: {} {}", request.getMethod(), request.getURI());

        ClientHttpResponse response = execution.execute(request, body);

        LOGGER.info("← Response: {}", response.getStatusCode());

        return response;
    }

}

그리고 구현한 인터셉터를 RestClient나 RestTemplate에 등록하면 해당 인터셉터가 체인으로 실행됩니다.

RestClient restClient = RestClient.builder()
    .requestInterceptor(new LoggingInterceptor())
    .requestInterceptor(new AuthInterceptor())
    .build();

여러 인터셉터는 체인으로 실행

// 실행 순서
Interceptor1 (전처리)
  → Interceptor2 (전처리)
    → 실제 HTTP 요청
  → Interceptor2 (후처리)
→ Interceptor1 (후처리)