[英]Resteasy Client Register filter for all services
是否可以在RestEasy中注冊一個適用於任何實例的過濾器? 今天我有很多使用一個客戶端的服務
例如:
Client client = ClientBuilder.newClient();
WebTarget target = client.target(ulrBase);
ResteasyWebTarget rtarget = (ResteasyWebTarget) target;
this.servico = rtarget.proxy(UsuarioServiceClient.class);
但是現在我必須傳遞一個標頭道具,所以我創建了這個:
公共類AuthHeadersRequestFilter實現ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) throws IOException {
requestContext.getHeaders().add("xx-Authorization", ((IntegraUI) UI.getCurrent()).getSessionToken());
}
}
但對於所有客戶端,我需要插入以下行:
client.register(new AuthHeadersRequestFilter());
因此,我可以在每個創建一個客戶端的地方進行配置,此過濾器將自動注冊嗎?
ks
您正在玩幾個Client
實例?
Client
實例是重量級的對象,您應該只有少量實例,並在可能的情況下重用它們。 看一下文檔 :
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);
當創建多個具有相同配置的客戶端時,這可能會很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.