2014-09-22 169 views
1

嘗試向我的寧靜服務收到的每個請求添加標頭。下面的入站http攔截器被調用,但不會添加標頭。http請求攔截器 - 使用cxf的restful web服務

package com.client.interceptors; 

    import java.util.Collections; 
    import java.util.List; 
    import java.util.Map; 

    import org.apache.cxf.interceptor.Fault; 
    import org.apache.cxf.message.Message; 
    import org.apache.cxf.phase.AbstractPhaseInterceptor; 
    import org.apache.cxf.phase.Phase; 

    public class ClientInterceptor extends AbstractPhaseInterceptor<Message> { 
     public ClientInterceptor() { 
      super(Phase.PRE_INVOKE); // Put this interceptor in this phase 
      System.out.println("inside constructor"); 
     } 

     public void handleMessage(Message msg) throws Fault { 
      // process the message 

      System.out.println("inside interceptor"); 
      Map<String, List> headers = (Map<String, List>) msg 
      .get(Message.PROTOCOL_HEADERS); 

      headers.put("token", 
      Collections.singletonList("abcd1234xyz56sa")); 

      msg.put(Message.PROTOCOL_HEADERS, headers); 

     } 
    } 

這是如何實現的?

+0

但是你調用寧靜的web服務? – Krishna 2014-09-22 05:15:48

+0

是的,這是一個簡單的GET服務,我從瀏覽器調用 – skonka 2014-09-22 05:20:01

+0

如果你只是想從瀏覽器中醒來,那麼你可以使用工具爲同一個海報:) – Krishna 2014-09-22 05:21:59

回答

0

嗯雅我有一個相同的解決方案。看看這個。它可能會有幫助。

Client client = Client.create(); 
    WebResource webResource =client.resource("URL"); 

    MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); 
    queryParams.add("json", js); //set parametes for request 

    appKey = "Addkey " + appKey; // appKey is unique number 

    //Get response from RESTful Server get(ClientResponse.class); 
    ClientResponse response = null; 
    response = webResource.queryParams(queryParams) 
          .header("Content-Type", "application/json;charset=UTF-8") 
          .header("Authorization", appKey) 
          .get(ClientResponse.class); 

    String jsonStr = response.getEntity(String.class); 
+0

謝謝,但這又把它關係到客戶端。我想要做的就是在服務端添加它。無論我的客戶是什麼,應該添加它,無論是來自java rest客戶端還是來自瀏覽器的ajax調用。 – skonka 2014-09-22 06:18:31

+0

意味着你需要添加它從客戶端我的意思是當你叫地址不是嗎?在客戶端添加 – Krishna 2014-09-22 06:26:26

+0

不應該成爲問題。我希望能夠在服務器端添加,而不考慮客戶端/請求。爲了給出背景,我基本上構建了一個模擬休息服務,尋找這些頭,因此寧願在服務端添加,而不是客戶端。 – skonka 2014-09-22 06:46:08