[java-shib-attribute] 03/11: JSATTR-36 - Conditions can't handle non-default location of contexts

Scott Cantor cantor.2 at osu.edu
Mon Mar 17 13:58:48 UTC 2025


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch maint-5.1
in repository java-shib-attribute.

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=04a27e91cdc05e93152b7f965ab2f7948f9cab5e

commit 04a27e91cdc05e93152b7f965ab2f7948f9cab5e
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Sep 4 16:03:20 2024 -0400

    JSATTR-36 - Conditions can't handle non-default location of contexts
    
    https://shibboleth.atlassian.net/browse/JSATTR-36
---
 .../context/AttributeResolverWorkContext.java      |  3 ++-
 .../AbstractAttributeResolutionLookupFunction.java | 22 +++++++++++++++++-----
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolverWorkContext.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolverWorkContext.java
index 74cde4990..c097b4239 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolverWorkContext.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolverWorkContext.java
@@ -63,7 +63,8 @@ public final class AttributeResolverWorkContext extends BaseContext {
      * 
      * @return resolved attribute definitions that been recorded
      */
-    @Nonnull @Unmodifiable @NotLive public Map<String, ResolvedAttributeDefinition> getResolvedIdPAttributeDefinitions() {
+    @Nonnull @Unmodifiable @NotLive
+    public Map<String, ResolvedAttributeDefinition> getResolvedIdPAttributeDefinitions() {
         return CollectionSupport.copyToMap(resolvedAttributeDefinitions);
     }
 
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/navigate/AbstractAttributeResolutionLookupFunction.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/navigate/AbstractAttributeResolutionLookupFunction.java
index a0838a710..655a13bcc 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/navigate/AbstractAttributeResolutionLookupFunction.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/navigate/AbstractAttributeResolutionLookupFunction.java
@@ -20,11 +20,15 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
+import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
+import org.opensaml.messaging.context.navigate.RecursiveTypedChildContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.slf4j.Logger;
 
 /**
  * Base class for a function that takes a {@link ProfileRequestContext} and requires access to an
@@ -35,16 +39,20 @@ import org.opensaml.profile.context.ProfileRequestContext;
 public abstract class AbstractAttributeResolutionLookupFunction<Type>
         implements ContextDataLookupFunction<ProfileRequestContext,Type> {
 
+    /** Class logger. */
+    @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractAttributeResolutionLookupFunction.class);
+    
     /**
      * Strategy used to locate the {@link AttributeResolutionContext} associated with a given
      * {@link ProfileRequestContext}.
      */
-    @Nonnull private Function<ProfileRequestContext,AttributeResolutionContext>
+    @Nonnull private Function<BaseContext,AttributeResolutionContext>
         attributeResolutionContextLookupStrategy;
 
     /** Constructor. */
     public AbstractAttributeResolutionLookupFunction() {
-        attributeResolutionContextLookupStrategy = new ChildContextLookup<>(AttributeResolutionContext.class);
+        attributeResolutionContextLookupStrategy =
+                new RecursiveTypedChildContextLookup<>(AttributeResolutionContext.class);
     }
 
     /**
@@ -55,7 +63,7 @@ public abstract class AbstractAttributeResolutionLookupFunction<Type>
      *            {@link ProfileRequestContext}
      */
     public void setAttributeResolutionContextLookupStrategy(
-            @Nonnull final Function<ProfileRequestContext,AttributeResolutionContext> strategy) {
+            @Nonnull final Function<BaseContext,AttributeResolutionContext> strategy) {
         attributeResolutionContextLookupStrategy =
                 Constraint.isNotNull(strategy, "AttributeResolutionContext lookup strategy cannot be null");
     }
@@ -65,7 +73,11 @@ public abstract class AbstractAttributeResolutionLookupFunction<Type>
         if (input != null) {
             final AttributeResolutionContext arc = attributeResolutionContextLookupStrategy.apply(input);
             if (arc != null) {
-                return doApply(arc);
+                if (arc.containsSubcontext(AttributeResolverWorkContext.class)) {
+                    return doApply(arc);
+                } else {
+                    log.warn("Located AttributeResolutionContext with no work context below it, ignoring");
+                }
             }
         }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list