[java-opensaml COMMIT] /trunk/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGene...

noreply at shibboleth.net noreply at shibboleth.net
Sat Mar 15 19:42:56 EDT 2014


Author: scantor
Date: Sat Mar 15 19:42:56 2014
New Revision: 3708

URL: http://svn.shibboleth.net/view/java-opensaml?rev=3708&view=rev
Log:
Express an SPNameQualifier from NameIDPolicy if set.

Modified:
    trunk/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java

Modified: trunk/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java?rev=3708&r1=3707&r2=3708&view=diff
==============================================================================
--- trunk/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java (original)
+++ trunk/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/profile/AbstractSAML2NameIDGenerator.java Sat Mar 15 19:42:56 2014
@@ -20,14 +20,24 @@
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.opensaml.profile.ProfileException;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.profile.AbstractNameIdentifierGenerator;
+import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.core.NameID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Strings;
 
 /**
  * Abstract base class for simple implementations of {@link SAML2NameIDGenerator}.
@@ -46,14 +56,32 @@
     
     /** Builder for objects. */
     @Nonnull private final SAMLObjectBuilder<NameID> nameBuilder;
+
+    /** Strategy used to locate an {@link AuthnRequest} to check. */
+    @Nonnull private Function<ProfileRequestContext,AuthnRequest> requestLookupStrategy;
     
     /** Constructor. */
     protected AbstractSAML2NameIDGenerator() {
         nameBuilder = (SAMLObjectBuilder<NameID>)
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<NameID>getBuilderOrThrow(
                         NameID.DEFAULT_ELEMENT_NAME);
+        requestLookupStrategy =
+                Functions.compose(new MessageLookup<>(AuthnRequest.class), new InboundMessageContextLookup());
     }
-
+    
+    /**
+     * Set the strategy used to locate the {@link AuthnRequest} to check for a
+     * {@org.opensaml.saml.saml2.core.NameIDPolicy}.
+     * 
+     * @param strategy lookup strategy
+     */
+    public synchronized void setRequestLookupStrategy(
+            @Nonnull final Function<ProfileRequestContext,AuthnRequest> strategy) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+    
+        requestLookupStrategy = Constraint.isNotNull(strategy, "AuthnRequest lookup strategy cannot be null");
+    }
+    
     /** {@inheritDoc} */
     @Override
     @Nullable protected NameID doGenerate(@Nonnull final ProfileRequestContext profileRequestContext)
@@ -77,4 +105,20 @@
         return nameIdentifier;
     }
 
+    /** {@inheritDoc} */
+    @Override
+    @Nullable protected String getEffectiveSPNameQualifier(@Nonnull final ProfileRequestContext profileRequestContext) {
+        
+        // Override the default behavior if the SP specifies a qualifier in its request.
+        final AuthnRequest request = requestLookupStrategy.apply(profileRequestContext);
+        if (request != null && request.getNameIDPolicy() != null) {
+            final String qual = request.getNameIDPolicy().getSPNameQualifier();
+            if (!Strings.isNullOrEmpty(qual)) {
+                return qual;
+            }
+        }
+        
+        return super.getEffectiveSPNameQualifier(profileRequestContext);
+    }
+
 }



More information about the commits mailing list