簡體   English   中英

所有服務的Resteasy客戶端注冊過濾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM