通常的做法是在WSDL中指定安全策略信息吗?

时间:2010-07-02 16:27:47

标签: web-services ws-security spring-ws

我们的团队正在使用Spring-WS和XWSS实现基于SOAP的Web服务。到目前为止,我们一直依靠Spring-WS从XSD生成WSDL。我们现在正在考虑是使用WS-SecurityPolicy记录WSDL中的安全性要求,还是将它们传递到单独的文档中。以下是我们正在思考的问题:

  • 什么是常态?将策略放在WSDL中是否常见?

  • 许多(任何?)客户端生成器是否在WSDL中获取WS-SecurityPolicy信息?

  • Spring-WS在生成WSDL时不支持WS-SecurityPolicy。切换到Apache CXF会对我们有所帮助吗?

此外,我们知道REST越来越受欢迎,但SOAP已经由权力指定。谢谢!

2 个答案:

答案 0 :(得分:1)

希望这对任何人都有帮助。

  

什么是常态?这是常见的   WSDL中的策略?

是的,这很常见。

  

许多(任何?)客户端生成器选择   WSDL中的WS-SecurityPolicy信息?

我不知道很多,我使用metro,它确实根据安全限制生成客户端。

答案 1 :(得分:1)

所以这是你可以做的,而且很简单:

1)在项目中包含cxf-bundle库。如果你使用的是maven,你可以这样做:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-bundle</artifactId>
    <version>2.7.18</version>
</dependency>

2)阅读here如何从wsdl生成java类。

3)确保在pom文件中指向正确的wsdlLocation,以便从wsdl生成java文件。

4)初始化生成的客户端并注入提供给您的用户名和密码。像这样:

final YourService service = new YourService();
final YourStub stub = service.getService();

final Map ctx = ((BindingProvider)stub).getRequestContext();

ctx.put("ws-security.username", userName);
ctx.put("ws-security.password", password);

stub.callYourMethod();

PS:请确保您拥有正确的库,我只是使用了cxf-bundle而没有使用cxf,而且它有效!之前它不起作用,因为我单独包含来自cxf的库。

希望有所帮助!!