Java 从JAX-RS客户端删除过滤器
我需要为来自客户端的所有传出请求添加一个授权头,并按照回答中的说明添加一个Java 从JAX-RS客户端删除过滤器,java,jax-rs,Java,Jax Rs,我需要为来自客户端的所有传出请求添加一个授权头,并按照回答中的说明添加一个ClientRequestFilter 现在我想更改我创建的过滤器的属性。我试图重新注册过滤器的新副本,但没有成功。我试图查看客户机对象的可用方法,但没有找到任何类似于取消注册或删除的方法 示例代码: Client client = ClientBuilder.newClient().register(new ClientObjectMapperProvider()); AuthTokenFilter authTokenF
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
当我在注册新过滤器后发送请求时,我希望auth头根据新配置而不同,但这并没有发生
经过进一步调查,如果已经注册了另一个相同类型的对象,那么客户端对象似乎不会注册该对象。但是仍然没有找到取消注册的方法。创建客户机实例非常繁重,因此您不想经常这样做,因此缓存和重用客户机实例是有意义的 如果您只是希望每个目标端点有一个单独的身份验证过滤器,那么不必在客户端实例上进行注册。在创建WebTarget(表示要与之通信的具体端点)之前,您可以在创建WebTarget后注册过滤器 配置webtarget也可能相当繁重() 但这确实意味着您可以为每个目标主机生成(和缓存)不同的身份验证过滤器 如果您希望根据某些已编辑的配置(例如属性文件/配置REST端点)动态重新配置客户端/webtarget,则
可以简单地拥有WebTarget/客户端实例的缓存,当配置更改时,您可以从头开始重新生成这些实例。(在丢弃任何旧的客户端实例之前,您需要记住调用
client.close()
)创建客户端实例非常繁重,因此您不想经常这样做,因此缓存和重用客户端实例是有意义的
如果您只是希望每个目标端点有一个单独的身份验证过滤器,那么不必在客户端实例上进行注册。在创建WebTarget(表示要与之通信的具体端点)之前,您可以在创建WebTarget后注册过滤器
配置webtarget也可能相当繁重()
但这确实意味着您可以为每个目标主机生成(和缓存)不同的身份验证过滤器
如果您希望根据某些已编辑的配置(例如属性文件/配置REST端点)动态重新配置客户端/webtarget,则
可以简单地拥有WebTarget/客户端实例的缓存,当配置更改时,您可以从头开始重新生成这些实例。(在丢弃任何旧的客户端实例之前,您需要记住调用
client.close()
)我试图重新注册一个新的筛选器副本,但没有成功。代码在哪里?@nullpointer我无法共享整件事,因为它分布在多个文件中,而且有很多文件,但是我已经编辑了,包含了基本的想法。你最终知道怎么做了吗?我只是需要创建一个新的客户端来运行每个测试。基本上是client.close(),client=new client()…我试图重新注册一个新的筛选器副本,但没有成功。代码在哪里?@nullpointer我无法共享整个内容,因为它分布在多个文件中,而且有很多,但是我已经编辑了,包含了基本的想法。你最终知道怎么做了吗?我只是需要创建一个新的客户端来运行每个测试。基本上,client.close(),client=new client()…这也是我的第一个想法,但是因为我用各种方法调用了很多不同的端点,所以我不想全部更改它们——这会破坏使用过滤器的全部意义——以避免复制粘贴相同的代码。这也是我的第一个想法,但是,由于我用各种方法调用了很多不同的端点,我不想全部更改它们——这将破坏使用过滤器的全部意义——以避免在所有地方复制粘贴相同的代码。