You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by co...@apache.org on 2011/03/08 15:05:43 UTC

svn commit: r1079361 - in /webservices/wss4j/trunk/src/main/java/org/apache/ws/security: message/ message/token/ processor/ util/

Author: coheigea
Date: Tue Mar  8 14:05:42 2011
New Revision: 1079361

URL: http://svn.apache.org/viewvc?rev=1079361&view=rev
Log:
[WSS-257] - Moved the SAML Assertion DOM Lookup into the CallbackLookup.

Modified:
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/CallbackLookup.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/DOMCallbackLookup.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/EnvelopeIdResolver.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/WSSecSignatureBase.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java
    webservices/wss4j/trunk/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/CallbackLookup.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/CallbackLookup.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/CallbackLookup.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/CallbackLookup.java Tue Mar  8 14:05:42 2011
@@ -30,16 +30,18 @@ import org.w3c.dom.Element;
 public interface CallbackLookup {
 
     /**
-     * Get the DOM element that corresponds to the given id. The Id can be a wsu:Id or else an
-     * Id attribute.
+     * Get the DOM element that corresponds to the given id and ValueType reference. The Id can 
+     * be a wsu:Id or else an Id attribute, or a SAML Id when the ValueType refers to a SAML
+     * Assertion.
      * @param id The id of the element to locate
+     * @param valueType The ValueType attribute of the element to locate (can be null)
      * @param checkMultipleElements If true then go through the entire tree and return 
      *        null if there are multiple elements with the same Id
      * @return the located element
      * @throws WSSecurityException
      */
     public Element getElement(
-        String id, boolean checkMultipleElements
+        String id, String valueType, boolean checkMultipleElements
     ) throws WSSecurityException;
     
     /**

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/DOMCallbackLookup.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/DOMCallbackLookup.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/DOMCallbackLookup.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/DOMCallbackLookup.java Tue Mar  8 14:05:42 2011
@@ -40,19 +40,31 @@ public class DOMCallbackLookup implement
     }
 
     /**
-     * Get the DOM element that corresponds to the given id. The Id can be a wsu:Id or else an
-     * Id attribute.
+     * Get the DOM element that corresponds to the given id and ValueType reference. The Id can 
+     * be a wsu:Id or else an Id attribute, or a SAML Id when the ValueType refers to a SAML
+     * Assertion.
      * @param id The id of the element to locate
+     * @param valueType The ValueType attribute of the element to locate (can be null)
      * @param checkMultipleElements If true then go through the entire tree and return 
      *        null if there are multiple elements with the same Id
      * @return the located element
      * @throws WSSecurityException
      */
     public Element getElement(
-        String id, boolean checkMultipleElements
+        String id, String valueType, boolean checkMultipleElements
     ) throws WSSecurityException {
         //
-        // Try the SOAP Body first
+        // Try to find a SAML Assertion Element if the ValueType corresponds to a SAML Assertion
+        //
+        if (WSConstants.WSS_SAML_KI_VALUE_TYPE.equals(valueType) 
+            || WSConstants.WSS_SAML2_KI_VALUE_TYPE.equals(valueType)) {
+            return 
+                WSSecurityUtil.findSAMLAssertionElementById(
+                    doc.getDocumentElement(), id
+                );
+        }
+        //
+        // Try the SOAP Body next
         //
         Element bodyElement = WSSecurityUtil.findBodyElement(doc);
         if (bodyElement != null) {

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/EnvelopeIdResolver.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/EnvelopeIdResolver.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/EnvelopeIdResolver.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/EnvelopeIdResolver.java Tue Mar  8 14:05:42 2011
@@ -96,7 +96,7 @@ public class EnvelopeIdResolver extends 
                 callbackLookup = new DOMCallbackLookup(uri.getOwnerDocument());
             }
             try {
-                selectedElem = callbackLookup.getElement(id, true);
+                selectedElem = callbackLookup.getElement(id, null, true);
             } catch (WSSecurityException ex) {
                 throw new ResourceResolverException(
                     ex.getMessage(), new Object[]{"Id: " + id + " not found"},

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/WSSecSignatureBase.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/WSSecSignatureBase.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/WSSecSignatureBase.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/WSSecSignatureBase.java Tue Mar  8 14:05:42 2011
@@ -116,7 +116,7 @@ public class WSSecSignatureBase extends 
                                 if (callbackLookup == null) {
                                     callbackLookup = new DOMCallbackLookup(doc);
                                 }
-                                toSignById = callbackLookup.getElement(idToSign, false);
+                                toSignById = callbackLookup.getElement(idToSign, null, false);
                                 wsDocInfo.addProtectionElement(toSignById);
                             }
                             List<String> prefixes = getInclusivePrefixes(toSignById);

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java Tue Mar  8 14:05:42 2011
@@ -267,32 +267,13 @@ public class SecurityTokenReference {
             id = id.substring(1);
         }
         //
-        // Try to find a SAML Assertion by searching the DOM tree
-        //
-        if (WSConstants.WSS_SAML_KI_VALUE_TYPE.equals(type) 
-            || WSConstants.WSS_SAML2_KI_VALUE_TYPE.equals(type)) {
-            Element assertion = 
-                WSSecurityUtil.findSAMLAssertionElementById(
-                    doc.getDocumentElement(),
-                    id
-                );
-            if (assertion != null) {
-                if (doDebug) {
-                    log.debug("SAML token ID: " + assertion.getAttribute("AssertionID"));
-                }
-                docInfo.addTokenElement(assertion);
-                return assertion;
-            }
-        }
-        
-        //
-        // Try to find the element by its (wsu) Id
+        // Delegate finding the element to the CallbackLookup instance
         //
         CallbackLookup callbackLookup = docInfo.getCallbackLookup();
         if (callbackLookup == null) {
             callbackLookup = new DOMCallbackLookup(doc);
         }
-        return callbackLookup.getElement(uri, true);
+        return callbackLookup.getElement(uri, type, true);
     }
     
     /**

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java Tue Mar  8 14:05:42 2011
@@ -256,7 +256,7 @@ public class ReferenceListProcessor impl
             callbackLookup = new DOMCallbackLookup(doc);
         }
         Element encryptedDataElement = 
-            callbackLookup.getElement(dataRefURI, true);
+            callbackLookup.getElement(dataRefURI, null, true);
         if (encryptedDataElement == null) {
             throw new WSSecurityException(
                 WSSecurityException.INVALID_SECURITY, "dataRef", new Object[] {dataRefURI}

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/processor/SignatureProcessor.java Tue Mar  8 14:05:42 2011
@@ -485,7 +485,7 @@ public class SignatureProcessor implemen
                     if (callbackLookup == null) {
                         callbackLookup = new DOMCallbackLookup(doc);
                     }
-                    se = callbackLookup.getElement(uri, false);
+                    se = callbackLookup.getElement(uri, null, false);
                 }
                 if (se == null) {
                     throw new WSSecurityException(WSSecurityException.FAILED_CHECK);

Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java?rev=1079361&r1=1079360&r2=1079361&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java Tue Mar  8 14:05:42 2011
@@ -251,10 +251,10 @@ public class WSSecurityUtil {
             return Collections.singletonList(part.getElement());
         }
         
-        // Next try to find the SOAP body
+        // Next try to find the Element via its wsu:Id
         String id = part.getId();
         if (id != null) {
-            Element foundElement = callbackLookup.getElement(id, false);
+            Element foundElement = callbackLookup.getElement(id, null, false);
             return Collections.singletonList(foundElement);
         }
         // Otherwise just lookup all elements with the localname/namespace