【问题标题】:Standalone java code to invoke wso2 secured web service用于调用 wso2 安全 Web 服务的独立 java 代码
【发布时间】:2013-07-01 14:57:52
【问题描述】:
我在 wso2esb 上有一个安全的 Web 服务。它基于用户名令牌。
现在,我想创建一个独立的 java 程序来调用这个 Web 服务。我很难弄清楚如何做到这一点。
你能帮我解决这个问题吗?
感谢和问候。
【问题讨论】:
标签:
security
service
web
wso2
esb
【解决方案1】:
以这种方式访问安全的网络服务,我假设你使用的是 UT 场景:
String trustStore = null;
ConfigurationContext ctx = null;
String policyFilePath = "[file_system_path]/secure_sample_policy.xml";
trustStore = "[file_system_path]/wso2carbon.jks";
System.setProperty("javax.net.ssl.trustStore",trustStore);
System.setProperty("javax.net.ssl.trustStorePassword","pass_store");
ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(null,
null);
this.stub = new ProxyStub(ctx);
stub._getServiceClient().engageModule("rampart");
stub._getServiceClient().engageModule("addressing");
Options options = this.stub._getServiceClient().getOptions();
options.setUserName("user");
options.setPassword("pass");
options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy(policyFilePath));
this.stub._getServiceClient().setOptions(options);
此时,您可以像使用另一个 Web 服务调用一样使用存根。
方法loadPolicy:
private static Policy loadPolicy(String xmlPath) throws Exception {
StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
return PolicyEngine.getPolicy(builder.getDocumentElement());
}
还有一个示例策略文件:
<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"/>
</wsp:Policy>
</sp:SignedSupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
【解决方案2】:
您可以尝试查看 Rampart 示例。基本示例 01 是 UsernameToken 身份验证。
源码在这里:link