问题描述
我有一个服务,它为其服务公开了许多 Jax-RS 接口。我现在想使用这些接口来连接服务。我正在使用 Quarkus,这意味着我正在使用 microprofile rest 客户端。因为我已经有了 JaxRS 接口,所以使用 @RegisterRestClient 方法并不是真的可行。相反,我使用的是 RestClientBuilder。
MyService client = RestClientBuilder.newBuilder()
.baseUri(URI.create("https://localhost:8080"))
.build(MyService.class);
我遇到的问题是身份验证。我需要访问的服务被锁定在基本身份验证之后。我为 microprofile REST 客户端找到的所有指南都是 this 的变体,其中解决方案是添加 headerparam。然而,这是不可能的,因为我已经预先制作了界面,并且复制粘贴整个内容以添加标题参数确实是我宁愿避免的事情。
还应该提到的是,我已经尝试使用 @Provider 过滤器来设置标头,但我似乎无法弄清楚如何使用该方法仅针对单个 REST 客户端,而我有几个。
那么:如何使用微配置文件休息客户端设置基本身份验证,而不会弄乱 Jax-Rs 界面本身?
解决方法
您应该能够在 @ClientHeaderParam
上使用 MyService
注释。
类似于:
@Path("/my")
@ClientHeaderParam(name = "Authorization",value = "{lookupAuth}")
public interface MyService {
default String lookupAuth() {
return "Basic " +
Base64.getEncoder().encodeToString("someuser:somepass".getBytes());
}
}
查看https://itnext.io/authentication-with-microprofile-rest-client-d1e9da774f70了解更多详情
,您可以注册每个实例 org.jboss.resteasy.client.jaxrs.internal.BasicAuthentication
(或者您可以编写类似的组件)并使用 RestClientBuilder 注册它。