2014-10-27 56 views
1

我使用 骆驼:2.12.1 春:4.0.5.RELEASE CXF:2.7.13问题与添加的wsse:在Apache的骆驼安全头路线

我的目标是提供一个SOAP消息wsse:安全头(如下所述)在Payload模式下从我的骆驼路由器到某个端点。

<wsse:Security soapenv:mustUnderstand="1" 
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 

    <wsse:UsernameToken 
     wsu:Id="UsernameToken-D5896C4D7E4684BCF8141101393698197"> 
     <wsse:Username><xsl:value-of select="User" /></wsse:Username> 
     <wsse:Password 
      Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><xsl:value-of select="password" /></wsse:Password> 
     <wsu:Created><xsl:value-of select="$START_TIME" /></wsu:Created> 
    </wsse:UsernameToken> 
</wsse:Security> 

要做到这一点,我创建了具有以下条目

<jaxws:client name="{http://com.abc/CallingService}CallingService" createdFromAPI="true"> 
    <jaxws:properties> 
    <entry key="ws-security.username" value= "User" /> 
    <entry key="ws-security.password" value="password" /> 
    </jaxws:properties> 
</jaxws:client> 

但不知道怎么用这个文件,或致电本某处路由或其他一些Spring配置文件中的配置文件,这样我可以在我的消息中出现肥皂标题。

我目前得到的异常

org.apache.cxf.ws.policy.PolicyException: No username available 
    at org.apache.cxf.ws.security.wss4j.AbstractTokenInterceptor.policyNotAsserted(AbstractTokenInterceptor.java:229) ~[cxf-rt-ws-security-2.7.13.jar:2.7.13] 
    at org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.addUsernameToken(UsernameTokenInterceptor.java:361) ~[cxf-rt-ws-security-2.7.13.jar:2.7.13] 
    at org.apache.cxf.ws.security.wss4j.UsernameTokenInterceptor.addToken(UsernameTokenInterceptor.java:307) ~[cxf-rt-ws-security-2.7.13.jar:2.7.13] 
    at org.apache.cxf.ws.security.wss4j.AbstractTokenInterceptor.handleMessage(AbstractTokenInterceptor.java:95) ~[cxf-rt-ws-security-2.7.13.jar:2.7.13] 
    at org.apache.cxf.ws.security.wss4j.AbstractTokenInterceptor.handleMessage(AbstractTokenInterceptor.java:61) ~[cxf-rt-ws-security-2.7.13.jar:2.7.13] 

我的WSDL的政策如下:

<wsp:Policy wsu:Id="EndpointSecurityPolicy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
     <sp:TransportBinding> 
      <wsp:Policy> 
      <sp:TransportToken> 
       <wsp:Policy> 
       <sp:HttpsToken> 
        <wsp:Policy> 
        <sp:RequireClientCertificate/> 
        </wsp:Policy> 
       </sp:HttpsToken> 
       </wsp:Policy> 
      </sp:TransportToken> 
      <sp:AlgorithmSuite> 
       <wsp:Policy> 
       <sp:Basic128/> 
       </wsp:Policy> 
      </sp:AlgorithmSuite> 
      <sp:IncludeTimestamp/> 
      </wsp:Policy> 
     </sp:TransportBinding> 
     <sp:SupportingTokens> 
      <wsp:Policy> 
      <sp:UsernameToken> 
       <wsp:Policy> 
       <sp:NoPassword/> 
       </wsp:Policy> 
      </sp:UsernameToken> 
      </wsp:Policy> 
     </sp:SupportingTokens> 
     </wsp:All> 
     <wsp:All> 
     <sp:TransportBinding> 
      <wsp:Policy> 
      <sp:TransportToken> 
       <wsp:Policy> 
       <sp:HttpsToken> 
        <wsp:Policy/> 
       </sp:HttpsToken> 
       </wsp:Policy> 
      </sp:TransportToken> 
      <sp:AlgorithmSuite> 
       <wsp:Policy> 
       <sp:Basic128/> 
       </wsp:Policy> 
      </sp:AlgorithmSuite> 
      <sp:IncludeTimestamp/> 
      </wsp:Policy> 
     </sp:TransportBinding> 
     <sp:SupportingTokens> 
      <wsp:Policy> 
      <sp:UsernameToken> 
       <wsp:Policy> 
       <sp:WssUsernameToken11/> 
       </wsp:Policy> 
      </sp:UsernameToken> 
      </wsp:Policy> 
     </sp:SupportingTokens> 
     </wsp:All> 
    </wsp:ExactlyOne> 
    </wsp:Policy> 

任何帮助或指针?

+0

你能告诉我们你的骆驼路线吗? – 2014-11-03 00:50:22

回答

0

也许你需要添加一个PasswordCallbackHandler。