oparl-service/template-server/src/main/java/de/twomartens/templateservice/interceptors/RequestTypeInterceptor.java

53 lines
1.6 KiB
Java

package de.twomartens.templateservice.interceptors;
import lombok.NoArgsConstructor;
import org.slf4j.MDC;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* marks requests of certain types like health check or integration test for better logging
*/
@Component
@NoArgsConstructor
public class RequestTypeInterceptor extends HandlerInterceptorAdapter
implements ClientHttpRequestInterceptor {
private static final String LOGGER_ID = "REQTYPE";
private static final String HEADER_FIELD_ID = "x-type";
public void markAsHealthCheck() {
MDC.put(LOGGER_ID, "HEALTH_CHECK");
}
public void markAsIntegrationTest() {
MDC.put(LOGGER_ID, "INTEGRATION_TEST");
}
// web client interceptor
@Override
public ClientHttpResponse intercept(
HttpRequest request,
byte[] body,
ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().add(HEADER_FIELD_ID, MDC.get(LOGGER_ID));
return execution.execute(request, body);
}
// web server interceptor
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
MDC.put(LOGGER_ID, request.getHeader(HEADER_FIELD_ID));
return true;
}
}