对于这个问题,很抱歉,我完全被阻止了。 我试图在 CXF 框架之上实现Web服务服务器。 Jax-ws 对处理网络服务非常有帮助,它很容易实现。 但是,当您想要引入安全性时会出现问题。
要在实现以下源代码时处理安全性:
EndpointImpl jaxWsEndpoint = (EndpointImpl) Endpoint.publish(endPointAddress, httpWebService);
inProps.put("action", "UsernameToken Timestamp");
inProps.put("passwordType", "PasswordText");
inProps.put("passwordCallbackClass", "com.company.webService.PasswordListener");
jaxWsEndpoint.getInInterceptors().add(new WSS4JInInterceptor(inProps));
我向此Web服务推送以下 SOAP 请求:
...
<soapenv:Header>
<wsse:Security soapenv:mustunderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Usernametoken wsu:id="UsernameToken-27777511" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>admin</wsse:Username>
<wsse:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass</wsse:Password>
</wsse:Usernametoken>
</wsse:Security>
</soapenv:Header>
...
CXF 框架收到我的请求尝试处理安全部分并向我抛出以下异常:
Jun 08, 2016 10:48:24 AM org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor checkActions
WARNING: Security processing failed (actions mismatch)
Jun 08, 2016 10:48:24 AM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {http://httpAbstractHandlerImplementation.webService.company.co /}HttpWebServiceService has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: A security error was encountered when verifying the message at org.apache.cxf.ws.security.wss4j.WSS4JUtils.createSoapFault(WSS4JUtils.java:218)
at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessageInternal(WSS4JInInterceptor.java:316)
如果有人知道我在哪里做错了。
由于
答案 0 :(得分:1)
您的安全标头中有inProps.put("action", "UsernameToken Timestamp");
但没有时间戳。从操作中删除“时间戳”或添加匹配的安全标头。
修改强>
消息非常明确“安全处理失败(操作不匹配)”因此,查看您的请求会发现另一个错误:wsse:UsernameToken
而不是wsse:Usernametoken
的{{1}} 3}}