[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