[java-opensaml COMMIT] in /trunk/opensaml-saml-impl/src: main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/...

noreply at shibboleth.net noreply at shibboleth.net
Wed Jun 24 18:59:35 EDT 2015


Author: putmanb
Date: Wed Jun 24 18:59:35 2015
New Revision: 4313

URL: http://svn.shibboleth.net/view/java-opensaml?rev=4313&view=rev
Log:
Add Assertion validator lookup function to WS-Security Assertion token message handler.
Unit tests of message handler.

Added:
    trunk/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java   (with props)
Modified:
    trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
    trunk/opensaml-saml-impl/src/test/resources/data/org/opensaml/saml/saml2/wssecurity/messaging/impl/issuer.crt
    trunk/opensaml-saml-impl/src/test/resources/data/org/opensaml/saml/saml2/wssecurity/messaging/impl/issuer.key

Modified: trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java?rev=4313&r1=4312&r2=4313&view=diff
==============================================================================
--- trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java	(original)
+++ trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandler.java	Wed Jun 24 18:59:35 2015
@@ -26,6 +26,7 @@
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.collection.LazyList;
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -70,8 +71,11 @@
     /** Flag which indicates whether a failure of Assertion validation should be considered fatal. */
     private boolean invalidFatal;
     
-    /** The SAML 2.0 Assertion validator.*/
+    /** The SAML 2.0 Assertion validator, may be null.*/
     private SAML20AssertionValidator assertionValidator;
+    
+    /** The SAML 2.0 Assertion validator lookup function, may be null.*/
+    private Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> assertionValidatorLookup;
     
     /** Function that builds a {@link ValidationContext} instance based on a 
      * {@link SAML20AssertionTokenValidationInput} instance. */
@@ -183,6 +187,27 @@
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         assertionValidator = validator;
     }
+    
+    /**
+     * Get the Assertion validator lookup function.
+     * 
+     * @return the Assertion validator lookup function, or null
+     */
+    @Nullable public Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> getAssertionValidatorLookup() {
+        return assertionValidatorLookup;
+    }
+
+    /**
+     * Set the Assertion validator lookup function.
+     * 
+     * @param function the Assertion validator lookup function, may be null
+     */
+    public void setAssertionValidatorLookup(
+            @Nullable final Function<Pair<MessageContext, Assertion>, SAML20AssertionValidator> function) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        assertionValidatorLookup = function;
+    }
 
     /** {@inheritDoc} */
     protected void doInitialize() throws ComponentInitializationException {
@@ -197,7 +222,11 @@
         }
         
         if (getAssertionValidator() == null) {
-            log.info("Assertion validator is null, must be resovleable from the MessageContext");
+            if (getAssertionValidatorLookup() == null) {
+                throw new ComponentInitializationException("Both Assertion validator and lookup function were null");
+            } else {
+                log.info("Assertion validator is null, must be resovleable via the lookup function");
+            }
         }
     }
 
@@ -223,13 +252,13 @@
         
         WSSecurityContext wsContext = messageContext.getSubcontext(WSSecurityContext.class, true);
         
-        SAML20AssertionValidator validator = getTokenValidator(messageContext);
-        if (validator == null) {
-            log.warn("No SAML20AssertionValidator was available, terminating");
-            throw new MessageHandlerException("No SAML20AssertionValidator was available");
-        }
-        
         for (Assertion assertion : assertions) {
+            SAML20AssertionValidator validator = resolveValidator(messageContext, assertion);
+            if (validator == null) {
+                log.warn("No SAML20AssertionValidator was available, terminating");

[... 54 lines stripped ...]


More information about the commits mailing list