Resteasy Client注册所有服务的过滤器

时间:2016-09-12 13:03:37

标签: java resteasy

可以在RestEasy中注册一个适用于任何实例的过滤器吗?今天我有很多服务使用一个客户端

例如:

Client client = ClientBuilder.newClient();      
WebTarget target = client.target(ulrBase);
ResteasyWebTarget rtarget = (ResteasyWebTarget) target;
this.servico = rtarget.proxy(UsuarioServiceClient.class);

但现在我必须传递一个标题道具,所以我创建了这个:

public class AuthHeadersRequestFilter实现ClientRequestFilter {

   @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        requestContext.getHeaders().add("xx-Authorization", ((IntegraUI) UI.getCurrent()).getSessionToken());
    }
}

但对于所有客户端我需要插入此行:

client.register(new AuthHeadersRequestFilter());

那么,我可以配置到我创建一个客户端的每个地方,这个过滤器会自动注册吗?

TKS

1 个答案:

答案 0 :(得分:0)

后退

你在玩多少Client个实例?

Client个实例是重量级对象,您应该只有少量个实例,并在可能的情况下重用它们。看看documentation

  

Client是管理客户端通信基础设施的重量级对象。初始化以及Client实例的处置可能是相当昂贵的操作。因此,建议在应用程序中仅构造少量Client个实例。处置之前必须正确关闭Client个实例以避免资源泄漏。

注册过滤器和拦截器

RESTEasy不会在Client上自动注册过滤器和拦截器。当使用@Provider注释过滤器或拦截器时,它会发生在服务器端。但在客户端,您必须手动注册过滤器和拦截器

您可以在Client实例中注册过滤器和拦截器,而不是在Configuration实例中注册过滤器和拦截器,并使用它来创建Client实例:

Configuration config = new Configuration();
config.register(MyClientResponseFilter.class);
config.register(new AnotherClientFilter());
Client client = ClientBuilder.newClient(config);

在使用相同配置创建多个客户端时,它可能很有用。