You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CDI配置Quarkus自定义ClientLogger以忽略请求头

如何通过CDI实现Quarkus REST Client Reactive自定义ClientLogger(忽略Bearer请求头)

1. 编写自定义ClientLogger实现类

先实现io.quarkus.rest.client.reactive.ClientLogger接口,用@ApplicationScoped标记让Quarkus能通过CDI扫描到。核心是重写logRequest方法,过滤掉携带Bearer令牌的Authorization请求头,避免敏感信息泄露:

import io.quarkus.rest.client.reactive.ClientLogger;
import jakarta.enterprise.context.ApplicationScoped;
import org.jboss.resteasy.reactive.client.spi.ClientRequestContext;
import io.netty.handler.codec.http.HttpHeaders;

@ApplicationScoped
public class RedactedAuthClientLogger implements ClientLogger {

    @Override
    public void logRequest(ClientRequestContext requestContext) {
        // 复制原请求头并移除Authorization字段
        HttpHeaders sanitizedHeaders = new HttpHeaders(requestContext.headers());
        sanitizedHeaders.remove("Authorization");

        // 自定义日志格式,也可以参考默认实现的逻辑输出
        System.out.printf("[REST Client] 请求:%s %s,头信息:%s%n",
                requestContext.method(),
                requestContext.uri(),
                sanitizedHeaders);
    }

    @Override
    public void logResponse(ClientRequestContext requestContext, int statusCode, HttpHeaders responseHeaders) {
        // 响应日志可沿用默认逻辑,也可自行定制
        System.out.printf("[REST Client] 响应:状态码 %d,头信息:%s%n", statusCode, responseHeaders);
    }
}

2. 绑定自定义Logger到REST Client

有两种绑定方式,按需选择:

  • 绑定到单个REST Client接口:在你的REST Client接口上添加@ClientLogger注解,指定自定义类:
import io.quarkus.rest.client.reactive.ClientLogger;
import io.quarkus.rest.client.reactive.RegisterRestClient;
import jakarta.ws.rs.GET;

@RegisterRestClient(baseUri = "https://your-api-domain.com")
@ClientLogger(RedactedAuthClientLogger.class)
public interface YourApiClient {

    @GET
    String getResource();
}
  • 全局生效(所有REST Client共用):只要自定义Logger类是CDI托管的(已加@ApplicationScoped),Quarkus会自动优先使用它,无需给每个接口加注解,直接替换默认Logger。

几点提醒

  • 自定义Logger必须是CDI bean,否则Quarkus无法识别并注入。
  • 若想贴合Quarkus默认日志风格,可参考io.quarkus.rest.client.reactive.DefaultClientLogger的源码调整输出逻辑。
  • 确保项目已引入Quarkus REST Client Reactive依赖,否则相关类会报找不到的错误。

内容的提问来源于stack exchange,提问作者leaqui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:35:08