gpt4 book ai didi

java - 从 JAX RS 客户端删除过滤器

转载 作者:行者123 更新时间:2023-12-02 02:39:00 25 4
gpt4 key购买 nike

我需要向客户端的所有传出请求添加授权 header ,并且按照 this 中的说明添加了 ClientRequestFilter回答。

现在我想更改我创建的过滤器的属性。我尝试重新注册过滤器的新副本,但没有成功。我尝试查看 Client 对象的可用方法,但没有找到诸如取消注册或删除之类的内容。

示例代码:

Client client = ClientBuilder.newClient().register(new ClientObjectMapperProvider());
AuthTokenFilter authTokenFilter = new AuthTokenFilter(authTokenService, authConfig);
client.register(authTokenFilter);
//make some requests


//In another method in another class
AuthTokenFilter newFilter = new AuthTokenFilter(authTokenService, newConfig);
client.register(newFilter);

//make more requests

当我在注册新过滤器后发送请求时,我希望身份验证 header 根据新配置而有所不同,但这并没有发生。

经过进一步调查,如果已经注册了另一个相同类型的对象,则客户端对象似乎不会注册该对象。但仍然没有找到注销的方法。

最佳答案

创建客户端实例非常重量级,因此您不想经常这样做,因此缓存和重用客户端实例是有意义的。

如果您只是希望每个目标端点有一个单独的身份验证过滤器,则不必在客户端实例上完成注册。在您实际与任何内容进行对话之前,您需要创建一个 WebTarget(它代表您要与之通信的具体端点)。创建 WebTarget 后,您可以使用它注册您的过滤器。

配置网络目标也可能相当繁重( see here )但这确实意味着您可以为每个目标主机生成(并缓存)不同的身份验证过滤器。

如果您想根据某些已编辑的配置(例如属性文件/配置 REST 端点)动态重新配置您的客户端/Web 目标,那么您可以简单地拥有一个 WebTarget/Client 实例的缓存,当配置更改时,您可以从头开始重新生成这些实例。 (您需要记住在丢弃任何旧客户端实例之前调用 client.close())

关于java - 从 JAX RS 客户端删除过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45794628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com