如何在HttpClient Wiretap日志中隐藏Authorization请求头?
可行,以下是实现方法
默认的Wiretap日志会记录所有请求头信息,要隐藏Authorization头,你需要自定义日志格式化器,对请求头进行过滤后再输出。
步骤1:自定义HttpLogFormatter
创建一个自定义的HttpLogFormatter,重写formatRequest方法,移除Authorization请求头:
import reactor.netty.http.HttpLogFormatter; import reactor.netty.http.HttpInfos; import reactor.netty.http.client.HttpClientRequest; public class RedactingHttpLogFormatter extends HttpLogFormatter { @Override public String formatRequest(HttpClientRequest request, HttpInfos infos) { // 复制请求对象并移除Authorization头,避免修改原请求 HttpClientRequest redactedRequest = request.mutate() .removeHeader("Authorization") .build(); // 调用父类方法格式化处理后的请求 return super.formatRequest(redactedRequest, infos); } }
步骤2:配置HttpClient使用自定义格式化器
在创建HttpClient的Wiretap时,指定自定义的格式化器,替代默认的AdvancedByteBufFormat.TEXTUAL:
import reactor.netty.http.client.HttpClient; import io.netty.handler.logging.LogLevel; HttpClient httpClient = HttpClient.create() .wiretap("reactor.netty.http.client.HttpClient", LogLevel.INFO, new RedactingHttpLogFormatter());
补充说明
- 自定义格式化器通过
mutate()方法复制请求对象,移除Authorization头后再格式化,不会影响实际发送的请求内容。 - 如果还需要过滤响应头,同样可以重写
formatResponse方法进行类似处理。
内容的提问来源于stack exchange,提问作者GWL
相关产品推荐
相关产品推荐

