2010-02-28 50 views
0

我正在嘗試在WebLogic 10.3中開發具有WS-Security功能的JAX WS Web服務。 我已經使用了ant任務WSDLC,JWSC和ClientGen來爲此Web服務生成框架/存根。在WebLogic 10.3中實現WS Security Web服務時出錯

我有兩個keystore,分別是包含密鑰和證書的WSIdentity.jks和WSTrust.jks。 WSIdentity.jks的別名之一是「ws02p」。

測試客戶端具有下面的代碼來調用Web服務:

SecureSimpleService service = new SecureSimpleService(); 
SecureSimplePortType port = service.getSecureSimplePortType(); 

List credProviders = new ArrayList(); 
CredentialProvider cp = new ClientBSTCredentialProvider(
    "E:\\workspace\\SecureServiceWL103\\keystores\\WSIdentity.jks", 
    "webservice", "ws01p","webservice"); 

credProviders.add(cp); 

string endpointURL="http://localhost:7001/SecureSimpleService/SecureSimpleService"; 
BindingProvider bp = (BindingProvider)port; 
Map<String, Object> requestContext = bp.getRequestContext(); 

requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); 
requestContext.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST,credProviders); 

requestContext.put(WSSecurityContext.TRUST_MANAGER, new TrustManager() { 
    public boolean certificateCallback(X509Certificate[] chain, 
    int validateErr) { 
     // Put some custom validation code in here. 
     // Just return true for now 
     return true; 
    } 
}); 

SignResponse resp1 = new SignResponse(); 

***resp1 = port.echoSignOnlyMessage("hello sign");*** 
System.out.println("Result: " + resp1.getMessage()); 

當我嘗試使用這個測試客戶端,我得到錯誤「無效簽名策略」和以下堆棧來調用這個網站servcie追蹤:

*[java] weblogic.wsee.security.wss.policy.SecurityPolicyArchitectureException: Invalid signing policy 
    [java] at weblogic.wsee.security.wss.plan.SecurityPolicyBlueprintDesigner.verifyPolicy(SecurityPolicyBlueprintDesigner.java:786) 
    [java] at weblogic.wsee.security.wss.plan.SecurityPolicyBlueprintDesigner.designOutboundBlueprint(SecurityPolicyBlueprintDesigner.java:136) 

我失去了在WebLogic中管理控制檯的任何配置設置或將其與別的東西嗎?

回答

0

我和你有同樣的錯誤。我們開始使用10.3,並且這個錯誤開始發生。以前的weblogic版本很好。我使用jdk 1.6中的wsimport工具來生成客戶端類。如果我在weblogic服務器之外運行我的客戶端,並依賴於jdk1.6實現,我不會得到這種幫助。但是,當weblogic.jar位於類路徑中時,會引發異常。我意識到jdk 1.6和weblogic都有自己的jax-ws實現。

如果您使用jdk 1.6將weblogic之外的客戶與junit聯繫起來,並在類路徑上嘗試使用不同的weblogic.jar版本,那麼您可能會得到不同的結果。

我們的web服務是ssl的一種方式。客戶端只需要信任主機。服務器證書位於jdk和weblogic使用的我們的信任庫中。即cacerts。關於我原以爲會考慮的安全問題,不應該再需要。

僅使用jdk 1.6或以前的weblogic版本,以下代碼正常工作。

TestService test = new TestService(); 
TestPortType port = test.getTestPort(); 
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
     "https://host/test"); 

((BindingProvider)port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, 
     "user_name"); 

((BindingProvider)port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, 
     "password"); 

TestRequest request = new TestRequest(); 
request.setWho("Dan Mad"); 
TestResult result = port.send(request); 
System.out.println("result: "+result.getResult()); 

當從10.3 weblogic.jar中是上然而類路徑,上面的代碼翻倒與SecurityPolicyArchitectureException異常。我不確定我們的客戶需要提供什麼。你的客戶正在設置更多與安全有關的事情,但我不確定這是否是我們的案件所必需的。我向Oracle提出了一個請求。沒有運氣。

相關問題