2015-10-08 83 views
4

有沒有辦法來添加頁眉到通過攔截請求,但沒有通過顯式設置一個頭,當使用JAX RS客戶端API:JAX RS客戶端API攔截

Client client = ClientBuilder.newClient(); 
Response response = client.target("someUrl").path("somePath").request().get(); 

在AOP方式

回答

5

創建ClientRequestFilter

@Provider 
public class MyClientRequestFilter implements ClientRequestFilter { 

    @Override 
    public void filter(ClientRequestContext requestContext) throws IOException { 
     requestContext.getHeaders().add("Authorization", "value"); 
    } 
} 

而且在註冊它的Client

Client client = ClientBuilder.newClient().register(MyClientRequestFilter.class); 
+0

我可以在全球範圍註冊此過濾器嗎? – Alexandr

+2

@Alexandr,你想創建多少客戶?請注意,'Client'實例是重量級對象,[文檔建議僅在應用程序中創建少量'Client'實例](http://docs.oracle.com/javaee/7/api/javax /ws/rs/client/Client.html)。在處理它之前,請不要忘記[關閉你的'Client'實例](http://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html#close--)。 –

+2

如果您在項目中啓用了[CDI](https://docs.oracle.com/javaee/7/tutorial/cdi-basic.htm),我的建議是使用[生產者方法或生產者字段](https://docs.oracle.com/javaee/7/tutorial/cdi-adv003.htm)。要關閉客戶端,請使用[disposer方法](https://docs.oracle.com/javaee/7/tutorial/cdi-adv003.htm)。 –