[java-opensaml COMMIT] /trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/SAMLMetadataSignatureSignin...

noreply at shibboleth.net noreply at shibboleth.net
Wed Mar 26 21:41:16 EDT 2014


Author: putmanb
Date: Wed Mar 26 21:41:16 2014
New Revision: 3739

URL: http://svn.shibboleth.net/view/java-opensaml?rev=3739&view=rev
Log:
Change metadata SigningMethod and DigestMethod extensions lookup algorithm, per dev list discussion. 

Modified:
    trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/SAMLMetadataSignatureSigningParametersResolver.java

Modified: trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/SAMLMetadataSignatureSigningParametersResolver.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/SAMLMetadataSignatureSigningParametersResolver.java?rev=3739&r1=3738&r2=3739&view=diff
==============================================================================
--- trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/SAMLMetadataSignatureSigningParametersResolver.java (original)
+++ trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/security/SAMLMetadataSignatureSigningParametersResolver.java Wed Mar 26 21:41:16 2014
@@ -22,6 +22,7 @@
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -69,13 +70,8 @@
             return;
         }
         
-        List<XMLObject> signingMethods = null;
-        
-        Extensions extensions = getExtensions(criteria.get(RoleDescriptorCriterion.class).getRole());
-        
-        if (extensions != null) {
-            signingMethods = extensions.getUnknownXMLObjects(SigningMethod.DEFAULT_ELEMENT_NAME);
-        }
+        List<XMLObject> signingMethods = getExtensions(criteria.get(RoleDescriptorCriterion.class).getRole(),
+                SigningMethod.DEFAULT_ELEMENT_NAME);
         
         if (signingMethods == null || signingMethods.isEmpty()) {
             super.resolveAndPopulateCredentialAndSignatureAlgorithm(params, criteria, whitelistBlacklistPredicate);
@@ -147,13 +143,8 @@
             return super.resolveReferenceDigestMethod(criteria, whitelistBlacklistPredicate);
         }
         
-        List<XMLObject> digestMethods = null;
-        
-        Extensions extensions = getExtensions(criteria.get(RoleDescriptorCriterion.class).getRole());
-        
-        if (extensions != null) {
-            digestMethods = extensions.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME);
-        }
+        List<XMLObject> digestMethods = getExtensions(criteria.get(RoleDescriptorCriterion.class).getRole(),
+                DigestMethod.DEFAULT_ELEMENT_NAME);
         
         if (digestMethods == null || digestMethods.isEmpty()) {
             return super.resolveReferenceDigestMethod(criteria, whitelistBlacklistPredicate);
@@ -170,29 +161,35 @@
     }
     
     /**
-     * Get the effective {@link Extensions} instance to consider.
-     * <p>
-     * Note that per the SAML metadata algorithm support extension specification, the parent 
-     * EntityDescriptor's Extensions should only be considered if the RoleDescriptor's Extensions
-     * contains neither a SigningMethod nor a DigestMethod.
-     * </p>
+     * Get the extensions indicated by the passed QName.  The passed RoleDescriptor's Extensions element
+     * is examined first. If at least 1 such extension is found there, that list list returned.
+     * If no such extensions are found on the RoleDescriptor, then the RoleDescriptor's parent EntityDescriptor 
+     * will be examined.
      * 
-     * @param roleDescriptor the role descriptor to evaluate
-     * @return the extensions instance to use, or null
+     * @param roleDescriptor the role descriptor instance to examine
+     * @param extensionName the extension name for which to search
+     * @return the list of extension XMLObjects found, or null
      */
-    @Nullable protected Extensions getExtensions(@Nonnull final RoleDescriptor roleDescriptor) {
+    @Nullable protected List<XMLObject> getExtensions(@Nonnull final RoleDescriptor roleDescriptor, 
+            @Nonnull final QName extensionName) {
+        List<XMLObject> result;
         Extensions extensions = roleDescriptor.getExtensions();
         if (extensions != null) {
-            if (extensions.getUnknownXMLObjects(SigningMethod.DEFAULT_ELEMENT_NAME).size() > 0
-                    || extensions.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME).size() > 0) {
-                return extensions;
+            result = extensions.getUnknownXMLObjects(extensionName);
+            if (!result.isEmpty()) {
+                return result;
             }
         }
         
         if (roleDescriptor.getParent() instanceof EntityDescriptor) {
-            return ((EntityDescriptor) roleDescriptor.getParent()).getExtensions();
+            extensions = ((EntityDescriptor)roleDescriptor.getParent()).getExtensions();
+            if (extensions != null) {
+                result = extensions.getUnknownXMLObjects(extensionName);

[... 10 lines stripped ...]


More information about the commits mailing list