从JAX RS客户端删除过滤器

时间:2017-08-21 10:18:36

标签: java jax-rs

我需要为来自客户端的所有传出请求添加授权标头,并按照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

当我在注册新过滤器后发送请求时,我希望auth标头根据新配置而不同,但是没有发生。

在进一步调查中,如果已经注册了另一个相同类型的客户端对象,则它似乎不会注册对象。尽管如此,仍然没有办法取消登记。

1 个答案:

答案 0 :(得分:2)

创建客户端实例非常重要,因此您不希望经常这样做,因此您可以缓存并重用客户端实例。

如果您只是希望每个目标端点都有一个单独的身份验证过滤器,则无需在客户端实例上进行注册。在你真正与任何东西交谈之前,你需要创建一个WebTarget(它代表你要与之沟通的具体端点)。一旦你创建了你的WebTarget,就可以用它来注册你的过滤器。

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

如果您想根据某些已编辑的配置(例如属性文件/配置REST端点)动态重新配置您的客户端/ webtarget,那么您 可以简单地拥有WebTarget / Client实例的缓存,您可以在配置更改时从头开始重新生成。 (您需要记住在丢弃任何旧客户端实例之前调用In Sql Sever: select format(expected_date,'dd-MM-yyyy'),format(order_date,'dd-MM-yyyy') from ProductOrder