Skip to content

Commit f47b7f5

Browse files
SentryManrbygrave
andauthored
[client] Allow Custom Headers to be Suppressed (#654)
* [client] Allow Custom Headers to be Suppressed - use a set to determine if a header should be suppressed - adds a method to the client builder to add to that set * Add javadoc to RequestLogger constructor --------- Co-authored-by: Rob Bygrave <robin.bygrave@gmail.com>
1 parent 3ab7556 commit f47b7f5

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

http-client/src/main/java/io/avaje/http/client/DHttpClientBuilder.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
import java.time.temporal.ChronoUnit;
1111
import java.util.ArrayList;
1212
import java.util.Collections;
13+
import java.util.HashSet;
1314
import java.util.List;
1415
import java.util.Optional;
16+
import java.util.Set;
1517
import java.util.concurrent.Executor;
1618
import java.util.concurrent.ExecutorService;
1719
import java.util.concurrent.Executors;
@@ -50,6 +52,7 @@ final class DHttpClientBuilder implements HttpClient.Builder, HttpClient.Builder
5052

5153
private final List<RequestIntercept> interceptors = new ArrayList<>();
5254
private final List<RequestListener> listeners = new ArrayList<>();
55+
private final Set<String> suppressed = new HashSet<>();
5356

5457
private void configureRetryHandler(BeanScope beanScope) {
5558
beanScope.getOptional(RetryHandler.class)
@@ -170,7 +173,7 @@ private DHttpClientContext buildClient() {
170173
final var httpClient = client != null ? client : defaultClient();
171174
if (requestLogging) {
172175
// register the built-in request/response logging
173-
this.listeners.add(new RequestLogger());
176+
this.listeners.add(new RequestLogger("\n", suppressed));
174177
}
175178
if (bodyAdapter == null) {
176179
bodyAdapter = defaultBodyAdapter();
@@ -317,6 +320,12 @@ public HttpClient.Builder priority(int priority) {
317320
return this;
318321
}
319322

323+
@Override
324+
public HttpClient.Builder suppressHeader(String header) {
325+
this.suppressed.add(header);
326+
return this;
327+
}
328+
320329
@Override
321330
public HttpClient.Builder.State state() {
322331
return this;

http-client/src/main/java/io/avaje/http/client/HttpClient.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,13 @@ interface Builder {
321321
*/
322322
Builder configureWith(BeanScope beanScope);
323323

324+
/**
325+
* Suppress logging of the given header name.
326+
*
327+
* <p>Authorization headers are suppressed by default.
328+
*/
329+
Builder suppressHeader(String header);
330+
324331
/**
325332
* Return the state of the builder.
326333
*/

http-client/src/main/java/io/avaje/http/client/RequestLogger.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package io.avaje.http.client;
22

3-
import io.avaje.applog.AppLog;
4-
53
import java.lang.System.Logger.Level;
64
import java.net.http.HttpHeaders;
75
import java.net.http.HttpRequest;
86
import java.net.http.HttpResponse;
7+
import java.util.Collection;
8+
import java.util.HashSet;
99
import java.util.List;
1010
import java.util.Map;
1111
import java.util.Set;
1212

13+
import io.avaje.applog.AppLog;
14+
1315
/**
1416
* Logs request and response details for debug logging purposes using <code>System.Logger</code>.
1517
* <p>
@@ -31,6 +33,7 @@ public class RequestLogger implements RequestListener {
3133
private static final System.Logger log = AppLog.getLogger("io.avaje.http.client.RequestLogger");
3234

3335
private final String delimiter;
36+
private final Set<String> suppressedHeaders = new HashSet<>();
3437

3538
/**
3639
* Create using the {@literal \n} new line character.
@@ -43,7 +46,16 @@ public RequestLogger() {
4346
* Create with a given line delimiter.
4447
*/
4548
public RequestLogger(String delimiter) {
49+
this(delimiter, List.of());
50+
}
51+
52+
/**
53+
* Create with a given line delimiter and set of headers to suppress.
54+
*/
55+
public RequestLogger(String delimiter, Collection<String> suppressedHeaders) {
4656
this.delimiter = delimiter;
57+
this.suppressedHeaders.add(DHttpClientContext.AUTHORIZATION);
58+
this.suppressedHeaders.addAll(suppressedHeaders);
4759
}
4860

4961
@Override
@@ -91,6 +103,6 @@ private void headers(StringBuilder sb, String label, HttpHeaders headers) {
91103
}
92104

93105
boolean obfuscate(String key) {
94-
return DHttpClientContext.AUTHORIZATION.equals(key);
106+
return suppressedHeaders.contains(key);
95107
}
96108
}

0 commit comments

Comments
 (0)