[java-identity-provider COMMIT] in /trunk: idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAct...

noreply at shibboleth.net noreply at shibboleth.net
Thu Aug 15 23:31:45 EDT 2013


Author: scantor
Date: Thu Aug 15 23:31:45 2013
New Revision: 4696

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=4696&view=rev
Log:
Context for requested authn types, compat checking added to validation actions.

Added:
    trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java   (with props)
Modified:
    trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
    trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicateFactoryRegistry.java
    trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/AuthenticationContext.java
    trunk/idp-authn-api/src/test/java/net/shibboleth/idp/authn/context/AuthenticationContextTest.java
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/InitializeAuthenticationContext.java
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateRemoteUser.java
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddress.java
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUsernamePasswordAgainstJAAS.java
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUsernamePasswordAgainstKerberos.java
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ValidateUsernamePasswordAgainstLDAP.java

Modified: trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java?rev=4696&r1=4695&r2=4696&view=diff
==============================================================================
--- trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java (original)
+++ trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractValidationAction.java Thu Aug 15 23:31:45 2013
@@ -27,6 +27,7 @@
 
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.AuthenticationErrorContext;
+import net.shibboleth.idp.authn.context.RequestedPrincipalContext;
 import net.shibboleth.idp.authn.context.SubjectCanonicalizationContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -37,6 +38,8 @@
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.EventContext;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
@@ -50,6 +53,9 @@
 public abstract class AbstractValidationAction extends AbstractAuthenticationAction
     implements PrincipalSupportingComponent {
 
+    /** Class logger. */
+    private final Logger log = LoggerFactory.getLogger(AbstractValidationAction.class);
+    
     /** Basis for {@link AuthenticationResult}. */
     @Nonnull private final Subject authenticatedSubject;
     
@@ -217,7 +223,44 @@
     @Nonnull protected Subject getSubject() {
         return authenticatedSubject;
     }
+
+    /** {@inheritDoc} */
+    protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext,
+            @Nonnull final AuthenticationContext authenticationContext) throws AuthenticationException {
+        
+        // If the request mandates particular principals, evaluate this validating component to see if it
+        // can produce a matching principal. This skips validators chained together in flows that aren't
+        // able to satisfy the request.
+        final RequestedPrincipalContext rpCtx =
+                authenticationContext.getSubcontext(RequestedPrincipalContext.class, false);
+        if (rpCtx != null) {
+            log.debug("{} Request contains principal requirements, evaluating for compatibility", getLogPrefix());
+            for (Principal p : rpCtx.getRequestedPrincipals()) {
+                final PrincipalEvalPredicateFactory factory =
+                        authenticationContext.getPrincipalEvalPredicateFactoryRegistry().lookup(
+                                p.getClass(), rpCtx.getOperator());
+                if (factory != null) {
+                    if (factory.getPredicate(p).apply(this)) {
+                        log.debug("{} Compatible with principal type '{}' and operator '{}'", getLogPrefix(),
+                                p.getClass(), rpCtx.getOperator());
+                        return true;
+                    } else {
+                        log.debug("{} Not compatible with principal type '{}' and operator '{}'", getLogPrefix(),
+                                p.getClass(), rpCtx.getOperator());
+                    }
+                } else {
+                    log.debug("{} No comparison logic registered for principal type '{}' and operator '{}'",

[... 392 lines stripped ...]


More information about the commits mailing list