从 JAX RS 客户机中删除过滤器



我需要为来自客户端的所有传出请求添加一个授权标头,并按照本答案中的说明添加了一个ClientRequestFilter

现在,我想更改我创建的筛选器的属性。我尝试重新注册过滤器的新副本,但没有奏效。我尝试查看客户端对象的可用方法,但没有找到取消注册或删除之类的内容。

示例代码:

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

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

在进一步调查中,如果已注册另一个相同类型的对象,则客户端对象似乎不会注册对象。仍然没有找到取消注册的方法。

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

如果您只是希望每个目标终结点具有单独的身份验证筛选器,则不必在客户端实例上完成注册。在实际与创建 WebTarget (表示要与之通信的具体终结点(所需的任何内容交谈之前,创建 WebTarget 后,您可以使用该 Web 目标注册过滤器。

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

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

最新更新