2015-05-28 71 views
0

我使用wsdl2java命令爲我的客戶端從WSDL創建了jar。現在,我需要知道如何驗證我的客戶以完成操作?CXF + wsdl2java +身份驗證

我正在使用CXF 2.7.16。我使用生成的類MyApp_Service創建了我的服務,我正在爲此付出努力。是否有一種簡單的方式告訴我的客戶它應該用來訪問Web服務的憑據?

我閱讀了關於Spring的配置,但我無法弄清楚它是否適用於我的情況,如果是的話。我試圖將MyApp_Service類轉換爲BindingProvider,以便使用包含將USERNAME和PASSWORD屬性置於上下文中的方法。但是,MyApp_Service不能轉換爲BindingProvider。

這是我的第一個Web服務客戶端應用程序。所以,任何幫助都會受到歡迎。

更新2015-05-28:我試圖定義AuthenticationPolicy,但似乎不工作。以下是代碼:

 Client client = JaxWsDynamicClientFactory.newInstance().createClient(wsdlUrl); 
     ClientImpl clt = (ClientImpl) client; 
     HTTPConduit cc = (HTTPConduit) clt.getConduit(); 

     org.apache.cxf.configuration.security.ObjectFactory secOF = new org.apache.cxf.configuration.security.ObjectFactory(); 
     AuthorizationPolicy ap = secOF.createAuthorizationPolicy(); 
     ap.setUserName(usagerWS); 
     ap.setPassword(mdpWS); 
     ap.setAuthorizationType("Basic"); 

     cc.setAuthorization(ap); 

使用WireShark進行嗅探,HTTP請求中明顯缺少授權標頭。

缺什麼?

回答

0

問題解決了,這裏是解決方案:

 MyApp_Service service = new MyApp_Service(wsdlUrl, new QName(namespace, serviceName)); 
     MyApp port = service.getMyApp(); 

     // Set credentials 
     Map<String, Object> reqCtxt = ((javax.xml.ws.BindingProvider) port).getRequestContext(); 
     reqCtxt.put(javax.xml.ws.BindingProvider.USERNAME_PROPERTY, username); 
     reqCtxt.put(javax.xml.ws.BindingProvider.PASSWORD_PROPERTY, password); 

動態客戶端沒有更多的用途。僅使用由wsdl2java生成的類。