我正在使用 OpenAPI Generator 为符合 swagger 标准的服务生成 Java 11 HTTP 客户端。
问题是:该服务需要基本身份验证,但它不会使用
WWW-Authenticate
标头向客户端发起挑战,因此 Java 11 HTTP 客户端不会发送使用构建器配置的基本身份验证。解决方法是直接在请求中添加 Authorization
标头,如 this thread 中所建议。
现在:从版本 4.3.1 开始,OpenAPI Generator 不会向我公开自定义 HTTP 请求的接口,所以我想知道是否最好覆盖负责的模板(api.mustache:126)或如果有更清洁的替代方案来完成此任务。
我遇到了与您相同的问题,我的解决方案是使用生成的
ApiClient
类及其 RequestInterceptor
字段。它允许在将请求发送到服务器之前自定义请求标头:
ApiClient client = new ApiClient();
client.setRequestInterceptor(new Consumer<HttpRequest.Builder>() {
@Override
public void accept(HttpRequest.Builder builder) {
builder.header("Authorization", "Basic " + Base64.getEncoder().encodeToString("foo:bar"));
}
});
如果您需要捕获回复标头,还有一个名为响应拦截器的支持版本。
我开始使用
native
库生成并遇到了同样的问题
你应该使用 setRequestInterceptor
方法
您可以传递 lambda 函数,而不是使用匿名类
String access_token = System.getenv("access_token");
ApiClient client = new ApiClient();
client.setRequestInterceptor(r -> r.header("Authorization", "Bearer " + access_token));