TraceHeaderRequestInterceptor.java
package no.nav.data.common.web;
import no.nav.data.common.utils.Constants;
import no.nav.data.common.utils.MdcUtils;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import java.io.IOException;
import java.util.Optional;
public class TraceHeaderRequestInterceptor implements ClientHttpRequestInterceptor {
private final boolean includeAllHeaders;
private TraceHeaderRequestInterceptor(boolean includeAllHeaders) {
this.includeAllHeaders = includeAllHeaders;
}
public static TraceHeaderRequestInterceptor fullInterceptor() {
return new TraceHeaderRequestInterceptor(true);
}
public static TraceHeaderRequestInterceptor correlationInterceptor() {
return new TraceHeaderRequestInterceptor(false);
}
@Override
public ClientHttpResponse intercept(HttpRequest req, byte[] body, ClientHttpRequestExecution execution) throws IOException {
String correlationId = MdcUtils.getOrGenerateCorrelationId();
req.getHeaders().set(Constants.HEADER_CORRELATION_ID, correlationId);
if (includeAllHeaders) {
String callId = Optional.ofNullable(MdcUtils.getCallId()).orElse(correlationId);
req.getHeaders().set(Constants.HEADER_CALL_ID, callId);
req.getHeaders().set(Constants.HEADER_CONSUMER_ID, Constants.APP_ID);
}
return execution.execute(req, body);
}
}