1

我正在学习 Webservice 安全性。我正在为此使用 CXF 框架。我开发了一项测试服务,它只会使我们发送的任何东西的价值翻倍。基于本教程

我为 XML 加密和签名添加了 WS-Policy。

然后我使用 CXF 将此服务的 Web 服务客户端开发为 Eclipse 项目。以下是我的客户端配置文件

<jaxws:client id="doubleItClient" serviceClass="com.DoubleIt" address="http://localhost:8080/myencws/services/DoubleItPort?wsdl">
<jaxws:features>
            <bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>

 <jaxws:properties>
            <entry key="ws-security.callback-handler" value="com.ClientKeystorePasswordCallback"/>        
            <entry key="ws-security.encryption.properties" value="com/clientKeystore.properties"/>
            <entry key="ws-security.signature.properties" value="com/clientKeystore.properties"/>
            <entry key="ws-security.encryption.username" value="myservicekey"/>
 </jaxws:properties>

我已经生成了所有的密钥库文件,并且我创建了 clientKeystore.properties 文件并放置在我项目的 src 目录中。

但是每当我运行这个客户端时,SOAP 请求消息都没有加密。所以旅馆服务器端我得到了例外

这些策略替代方案无法满足:{ http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702 }EncryptedParts { http://docs.oasis-open.org/ws-sx/ws -securitypolicy/200702 }SignedParts

以下是我的 SOAP 请求

<soap:Envelope
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:doubleValue
 xmlns:ns2="http://com/"><arg0>5</arg0></ns2:doubleValue></soap:Body></soap:Envelope>

我正在使用 CXF2.7.3。我不知道怎么了。请帮我。

4

3 回答 3

0

我之前的代码也有类似的问题,缺少的是 jar 依赖项,当您的客户端从 WSDL 读取安全策略时,它会执行实际加密。

我的解决方法是在您的 POM 中添加某些 Maven 依赖项以启用加密。检查这个网址:http ://cxf.apache.org/docs/using-cxf-with-maven.html

另请阅读网址http://cxf.apache.org/docs/ws-securitypolicy.html中的“启用 WS-SecurityPolicy”部分

我希望这有帮助

于 2013-03-23T11:46:58.293 回答
0

确保您使用的是正确的库。尝试仅包含 cxf 包,删除其他 cxf 依赖项如果您使用的是 maven,则如下所示:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-bundle</artifactId>
    <version>2.7.18</version>
</dependency>
于 2018-02-16T21:06:15.353 回答
0

我遇到了同样的问题,经过大量实验,以下指南每次都有帮助。

  1. 构建您的 cxf 客户端配置 xml 以导入 META-INF cxf.xml。
  2. 定义 cxf 总线功能(用于记录)
  3. 定义 http 管道(如果需要 TLS 握手等)
  4. jaxws:client bean,名称属性为 {targetNameSpaceWSDL)/PortName 并且 createdFromAPI=true 和 abstract=true
  5. 使客户端标签包含 jaxws 功能。记住使用最新的“安全”而不是“ws-security”
  6. 在您的 java 客户端类中,使用 SpringBus 加载 cxf 客户端配置 xml。SpringBus 客户端配置的 SVN 链接
  7. 确保 WS 策略处理所需的所有依赖项都存在于类路径中,如 cxf-rt-ws-policy 和 cxf-rt-ws-security.jar 以及 bouncycastle 提供程序(如果需要)

注意:security.signature.properties 和security.encryption.properties 也可以外化,直接用xml 值中的绝对路径引用。

于 2020-12-09T06:53:07.697 回答