这是我第一个使用CXF和Web Services的项目,使用Tomcat作为servlet容器,也是我在StackOverflow中的第一个问题,所以请耐心等待.... ;-)
我正在使用:
**问题:** WS-SecurityPolicy未在服务器端启用/不工作。
WS-SecurityPolicy在Web服务的wsdl文件中实现,策略似乎工作正常,因为在客户端,SOAP输出消息体已签名。
我遇到的问题是在服务器端,没有任何策略应用于响应
我遇到的第一个问题是SOAP标头"必须理解= 1",服务器无法识别安全标头并引发异常。
我怀疑是Web服务没有应用策略,然后为了避免标题的例外我放了一个什么都不做的处理程序。
现在服务器响应SOAP消息但是以清晰的形式(未签名,没有BinarySecurityTolen和其他东西),我的怀疑是真的,策略不起作用。
我认为这个问题是对CXF文件的错误配置......
在Tomcat的启动过程中加载了Web服务的cxf bean配置。
cxf-wsTransaccion.xml文件包含:
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://ole/wsTransaccion http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws">
<bean id="myPasswordCallback"
class="implementacion.ServerKeystorePasswordCallback" />
<jaxws:endpoint xmlns:tns="http://ole/wsTransaccion" id="wsTransaccion"
implementor="implementacion.WsTransaccionImpl"
wsdlLocation="wsdl/wsTransaccion,wsdl" endpointName="tns:WsTransaccionPort"
serviceName="tns:WsTransaccionService" address="/WsTransaccionPort">
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
<jaxws:properties>
<entry key="security.callback-handler">
<ref bean="myPasswordCallback"/>
</entry>
<entry key="security.encryption.properties" value="keystore.properties"/>
<entry key="security.signature.properties" value="keystore.properties"/>
<entry key="ws-security.encryption.username" value="useReqSigCert"/>
</jaxws:properties>
</jaxws:endpoint>
我认为问题coluld位于文件keystore.properties的位置,但是如果不存在则抛出没有异常(如java.io.FileNotFoundException)。
我看到的所有例子都是Maven的项目,但这不是一个MAVEN项目所以我没有文件夹&#34;资源&#34;其中放置了属性文件和密钥库
我不知道keystore.properties的正确位置,我认为必须在类路径中,然后我将它放在一个名为resources的包中,并将密钥库放在一起。
keystore.properties的内容:
>org.apache.wss4j.crypto.provider=org.apache.ws.security.components.crypto.Merlin
>org.apache.wss4j.crypto.merlin.keystore.file=server.p12
>org.apache.wss4j.crypto.merlin.keystore.type=PKCS12
>org.apache.wss4j.crypto.merlin.keystore.alias=server
>org.apache.wss4j.crypto.merlin.keystore.password=xxxxxx<br/>
其他可能性是org.apache.wss4j.crypto.merlin.keystore.file = server.p12也不在正确的位置,尽管它与keystore.properties在同一个地方
任何建议都将非常感谢。 非常感谢!!!。
答案 0 :(得分:0)
问题出在这里:
Tomcat控制台:
&#34;警告:资源类路径:在类加载器中找不到./ resources / policyBinding.xml。&#34;
虽然policyBinding.xml在类路径中没有正确加载,因为在Web服务的界面中进行注释:
@Policy(uri =&#34; ./ resources policyBinding.xml&#34;,placement = Policy.Placement.DEFAULT)
感谢Alfredo(WS-Security Policy node not being generated in Apache CXF with Spring and custom context file
我想出了正确的语法:
@Policy(uri =&#34; classpath:policyBinding.xml&#34;,placement = Policy.Placement.DEFAULT)