Switch defaults and model for logging sensitive data
Issue: SPR-17029
This commit is contained in:
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.client.reactive.ClientHttpConnector;
|
||||
@@ -71,7 +72,7 @@ public abstract class ExchangeFunctions {
|
||||
|
||||
private final ExchangeStrategies strategies;
|
||||
|
||||
private boolean disableLoggingRequestDetails;
|
||||
private boolean enableLoggingRequestDetails;
|
||||
|
||||
|
||||
public DefaultExchangeFunction(ClientHttpConnector connector, ExchangeStrategies strategies) {
|
||||
@@ -83,8 +84,8 @@ public abstract class ExchangeFunctions {
|
||||
strategies.messageWriters().stream()
|
||||
.filter(LoggingCodecSupport.class::isInstance)
|
||||
.forEach(reader -> {
|
||||
if (((LoggingCodecSupport) reader).isDisableLoggingRequestDetails()) {
|
||||
this.disableLoggingRequestDetails = true;
|
||||
if (((LoggingCodecSupport) reader).isEnableLoggingRequestDetails()) {
|
||||
this.enableLoggingRequestDetails = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -109,12 +110,13 @@ public abstract class ExchangeFunctions {
|
||||
|
||||
private void logRequest(ClientRequest request) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
String formatted = request.url().toString();
|
||||
if (this.disableLoggingRequestDetails) {
|
||||
int index = formatted.indexOf("?");
|
||||
formatted = (index != -1 ? formatted.substring(0, index) : formatted);
|
||||
String message = request.logPrefix() + "HTTP " + request.method() + " " + request.url();
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace(message + ", headers=" + formatHeaders(request.headers()));
|
||||
}
|
||||
else {
|
||||
logger.debug(message);
|
||||
}
|
||||
logger.debug(request.logPrefix() + "HTTP " + request.method() + " " + formatted);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,16 +124,19 @@ public abstract class ExchangeFunctions {
|
||||
if (logger.isDebugEnabled()) {
|
||||
int code = response.getRawStatusCode();
|
||||
HttpStatus status = HttpStatus.resolve(code);
|
||||
String message = "Response " + (status != null ? status : code);
|
||||
String message = logPrefix + "Response " + (status != null ? status : code);
|
||||
if (logger.isTraceEnabled()) {
|
||||
String headers = this.disableLoggingRequestDetails ? "" : ", headers=" + response.getHeaders();
|
||||
logger.trace(logPrefix + message + headers);
|
||||
logger.trace(message + ", headers=" + formatHeaders(response.getHeaders()));
|
||||
}
|
||||
else {
|
||||
logger.debug(logPrefix + message);
|
||||
logger.debug(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String formatHeaders(HttpHeaders headers) {
|
||||
return this.enableLoggingRequestDetails ? headers.toString() : headers.isEmpty() ? "{}" : "{masked}";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -138,6 +138,9 @@ public class RequestPartMethodArgumentResolver extends AbstractMessageReaderArgu
|
||||
return parts.flatMap(part -> {
|
||||
ServerHttpRequest partRequest = new PartServerHttpRequest(exchange.getRequest(), part);
|
||||
ServerWebExchange partExchange = exchange.mutate().request(partRequest).build();
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(exchange.getLogPrefix() + "Decoding part '" + part.name() + "'");
|
||||
}
|
||||
return readBody(elementType, isRequired, bindingContext, partExchange);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ public class MultipartIntegrationTests extends AbstractHttpHandlerIntegrationTes
|
||||
}
|
||||
|
||||
private static Mono<String> partFluxDescription(Flux<? extends Part> partsFlux) {
|
||||
return partsFlux.log().collectList().map(MultipartIntegrationTests::partListDescription);
|
||||
return partsFlux.collectList().map(MultipartIntegrationTests::partListDescription);
|
||||
}
|
||||
|
||||
private static String partListDescription(List<? extends Part> parts) {
|
||||
|
||||
Reference in New Issue
Block a user