2011-11-23 50 views
1

我有一個WebSphere 5.x WSAD生成的Web服務客戶端,它使用帶有BasicAuth身份驗證方法的專用登錄綁定。使用WSAD Web服務客戶端編輯器工具我可以設置所需的安全設置和憑證,然後將其傳播到ibm-webservicesclient-bnd/ext.xmi文件。在服務器上部署Web應用程序後,它可以正常工作。我能夠通過管理控制檯訪問在WebSphere這些憑據,通過轉到:以編程方式爲WebSphere 5.x設置憑證請求發件人綁定BasicAuth Web服務客戶端

Enterprise Applications > *MyApp* > Web Module > *MyModule* > Web Services: Client Security Bindings > Request Sender Binding > Login Binding 

不過,我需要以編程方式設置這些憑據,從Java邏輯。看來下面的調用是不夠的:

((javax.xml.rpc.Stub) service)._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "user"); 
((javax.xml.rpc.Stub) service)._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "password"); 

因爲我得到如下回應:

WSEC5075E: No security token found which satisfies any one of AuthMethods. 

是否可以設置生成的客戶端的Java邏輯中所需要的憑據?

如果沒有,也許這可以通過以低級方式訪問調用來完成,可能需要在SOAP消息頭中手動輸入所需的安全元素?

預先感謝您!

回答

2

我設法通過生成Axis Web Service客戶端並實現我自己的org.apache.axis.handlers.BasicHandler來修改該調用來解決問題。處理程序基於axis-wsse庫中的WsseClientHandler。

所需的邏輯被放置在存根文件內,如下所示:

_call.setUsername("username"); 
    _call.setPassword("password"); 
    _call.setProperty(WsseClientHandler.PASSWORD_OPTION, 
      WsseClientHandler.PASSWORD_CLEARTEXT); 
    _call.setClientHandlers(new WsseClientHandler(), null);