2010-02-28 58 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提出了一个请求。没有运气。

相关问题