2016-05-24 19 views
0

Ich wollte Nonce und Created Element in WSSE Security Header mit CXF injizieren.cxf Einstellung Nonce und erstellt in SOAP wsse Header

<soapenv:Header> 
    <wsse:Security 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-6"> 
      <wsse:Username>==Username==</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">==Password==</wsse:Password> 
      <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">===EncodeString===</wsse:Nonce> 
      <wsu:Created>2016-05-20T10:51:24.795Z</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
</soapenv:Header> 

Ich verwende org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor Klasse, um die CXF Header zu füllen. Aber das füllt nur wsse: Benutzername und wsse: Passwort. Ich wollte wsse: Nonce und wsse: Erstellt auch in meinem Header. Welchen Ansatz sollte ich verwenden, um Elemente in meinem Security-Header zu füllen?

Unten ist der Code, den ich diese aufzufüllen bin mit,

Map<String, Object> properties = new HashMap<String, Object>(); 
properties.put(WSHandlerConstants.ACTION, "UsernameToken"); 
properties.put(WSHandlerConstants.USER, "userName-Text"); 
properties.put(WSHandlerConstants.PASSWORD_TYPE, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"); 
properties.put(WSHandlerConstants.MUST_UNDERSTAND, "true"); 
properties.put(WSHandlerConstants.PW_CALLBACK_REF, new CustomWSPasswordCallback(passwordText)); 

WSS4JOutInterceptor wss4jOutInterceptor = new WSS4JOutInterceptor(); 
wss4jOutInterceptor.setProperties(properties); 

ich Ihre Hilfe zu schätzen wissen.

Danke, Ashish Mishra

Antwort

2

Fügen Sie diese auf Ihre Eigenschaften, wenn Sie WSS4J < 2.0 verwenden:

properties.put(WSHandlerConstants.ADD_UT_ELEMENTS, WSConstants.NONCE_LN + " " + WSConstants.CREATED_LN); 

wenn WSS4J mit> = 2,0, dann sollte es sein:

properties.put(WSHandlerConstants.ADD_USERNAMETOKEN_NONCE, "true"); 
properties.put(WSHandlerConstants.ADD_USERNAMETOKEN_CREATED, "true"); 
+0

Vielen Dank für Ihre Antwort. Mein WSS4J <2.0 also oben hat bei mir nicht funktioniert. Aber dein Vorschlag hilft mir, die Dinge herauszufinden. Ich schreibe meine Antwort wie folgt. Vielen Dank! –

0

Ich habe es geschafft, das Element Nonce und Created in den WSSE-Header zu injizieren, indem ich die Eigenschaft in meiner Property-Map

hinzufüge
properties.put(WSHandlerConstants.ADD_UT_ELEMENTS, WSConstants.NONCE_LN + " " + WSConstants.CREATED_LN); 

Das funktionierte für mich.

Weitere Sie http://tobiasbayer.com/post/apache-cxf-usernametoken-authentication-with-nonce/

Danke Jungs beziehen. Ashish Mishra