[java-shib-attribute] branch main updated: IDP-1972 - Revisit deferred classnames for solving layering conflicts

Scott Cantor cantor.2 at osu.edu
Thu Aug 3 15:18:12 UTC 2023


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

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

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

The following commit(s) were added to refs/heads/main by this push:
     new 4ac55a64e IDP-1972 - Revisit deferred classnames for solving layering conflicts
4ac55a64e is described below

commit 4ac55a64eb47a063238735a475e26d194c3e9779
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Aug 3 11:18:09 2023 -0400

    IDP-1972 - Revisit deferred classnames for solving layering conflicts
    
    https://shibboleth.atlassian.net/browse/IDP-1972
    
    Replace hardwired classes with property lookups.
---
 .../resolver/spring/BaseResolverPluginParser.java  | 31 +++++++++++++---------
 .../SubjectDerivedAttributeDefinitionParser.java   | 29 +++++++++++---------
 .../spring/dc/impl/SubjectDataConnectorParser.java | 17 ++++++------
 3 files changed, 44 insertions(+), 33 deletions(-)

diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
index 74c8f375b..4e23c695c 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/BaseResolverPluginParser.java
@@ -42,16 +42,12 @@ import net.shibboleth.shared.xml.ElementSupport;
 /** Bean definition parser for a {@link net.shibboleth.idp.attribute.resolver.ResolverPlugin}. */
 public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinitionParser {
 
-    /** Name of class to attempt to instantiate to handle relying party predicates. */
-    @Nonnull @NotEmpty private static final String RELYING_PARTIES_PREDICATE_CLASS =
-            "net.shibboleth.profile.context.logic.RelyingPartyIdPredicate";
-
-    /** Name of factory method to handle relying party predicates. */
-    @Nonnull @NotEmpty private static final String RELYING_PARTIES_PREDICATE_METHOD = "fromCandidates";
-
     /** Stores class of the predicate handling the relyingParties setting. */
     @Nullable private Class<? extends Predicate<?>> relyingPartyPredicateClass;
     
+    /** Stores name of factory method to invoke on the predicate class handling the relyingParties setting. */
+    @Nullable private String relyingPartyPredicateFactoryMethod;
+    
     /** An Id for the definition, used for debugging messages and creating names of children. */
     @Nonnull @NotEmpty private String defnId = "<Unnamed Attribute or Connector>";
 
@@ -62,7 +58,14 @@ public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinit
     @SuppressWarnings("unchecked")
     public BaseResolverPluginParser() {
         try {
-            relyingPartyPredicateClass = (Class<? extends Predicate<?>>) Class.forName(RELYING_PARTIES_PREDICATE_CLASS);
+            final String className = getCustomProperty(BaseResolverPluginParser.class.getName()
+                    + ".RelyingPartyIdPredicate.class", null);
+            if (className != null) {
+                relyingPartyPredicateClass = (Class<? extends Predicate<?>>) Class.forName(className);
+                log.debug("Using class for mapped tag predicate: {}", className);
+                relyingPartyPredicateFactoryMethod = getCustomProperty(BaseResolverPluginParser.class.getName()
+                        + ".RelyingPartyIdPredicate.factoryMethod", null);
+            }
         } catch (final ClassNotFoundException e) {
             // Will warn later any time we encounter a relevant setting.
         }
@@ -77,7 +80,7 @@ public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinit
         return defnId;
     }
 
-// Checkstyle: CyclomaticComplexity OFF
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
     /** {@inheritDoc} */
     @Override protected void doParse(@Nonnull final Element config, @Nonnull final ParserContext parserContext,
             @Nonnull final BeanDefinitionBuilder builder) {
@@ -156,7 +159,9 @@ public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinit
             }
             assert relyingPartyPredicateClass != null;
             rpBuilder = BeanDefinitionBuilder.genericBeanDefinition(relyingPartyPredicateClass);
-            rpBuilder.setFactoryMethod(RELYING_PARTIES_PREDICATE_METHOD);
+            if (relyingPartyPredicateFactoryMethod != null) {
+                rpBuilder.setFactoryMethod(relyingPartyPredicateFactoryMethod);
+            }
             rpBuilder.addConstructorArgValue(
                     SpringSupport.getAttributeValueAsList(relyingPartiesAttr));
         } else if (excludeRelyingPartiesAttr != null) {
@@ -167,7 +172,9 @@ public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinit
             assert relyingPartyPredicateClass != null;
             final BeanDefinitionBuilder unnegated =
                     BeanDefinitionBuilder.genericBeanDefinition(relyingPartyPredicateClass);
-            unnegated.setFactoryMethod(RELYING_PARTIES_PREDICATE_METHOD);
+            if (relyingPartyPredicateFactoryMethod != null) {
+                unnegated.setFactoryMethod(relyingPartyPredicateFactoryMethod);
+            }
             unnegated.addConstructorArgValue(
                     SpringSupport.getAttributeValueAsList(excludeRelyingPartiesAttr));
             rpBuilder = BeanDefinitionBuilder.genericBeanDefinition(PredicateSupport.class);
@@ -210,7 +217,7 @@ public abstract class BaseResolverPluginParser extends AbstractCustomBeanDefinit
         
         return null;
     }
-// Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity|MethodLength ON
     
     /** Controls parsing of Dependencies. 
      * 
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SubjectDerivedAttributeDefinitionParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SubjectDerivedAttributeDefinitionParser.java
index 29f3c14ac..90786acd5 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SubjectDerivedAttributeDefinitionParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/impl/SubjectDerivedAttributeDefinitionParser.java
@@ -29,7 +29,6 @@ import org.w3c.dom.Element;
 import net.shibboleth.idp.attribute.resolver.ad.impl.ContextDerivedAttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.spring.ad.BaseAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
-import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
 import net.shibboleth.shared.spring.util.SpringSupport;
@@ -41,14 +40,6 @@ public class SubjectDerivedAttributeDefinitionParser extends BaseAttributeDefini
     @Nonnull public static final QName TYPE_NAME_RESOLVER =
             new QName(AttributeResolverNamespaceHandler.NAMESPACE, "SubjectDerivedAttribute");
 
-    /** Class name for sourcing values from Subject(s). */
-    @Nonnull @NotEmpty private static final String SUBJECT_DERIVED_CLASS_NAME =
-            "net.shibboleth.idp.authn.context.impl.SubjectDerivedAttributeValuesFunction"; 
-
-    /** Class name for sourcing values from Principal(s). */
-    @Nonnull @NotEmpty private static final String PRINCIPAL_DERIVED_CLASS_NAME =
-            "net.shibboleth.idp.authn.context.impl.IdPAttributePrincipalValuesFunction"; 
-
     /** Class for sourcing values from Subject(s). */
     @Nullable private Class<? extends Function<?,?>> subjectDerivedClass;
 
@@ -62,10 +53,22 @@ public class SubjectDerivedAttributeDefinitionParser extends BaseAttributeDefini
     @SuppressWarnings("unchecked")
     public SubjectDerivedAttributeDefinitionParser() {
         try {
-            subjectDerivedClass = (Class<? extends Function<?, ?>>) Class.forName(SUBJECT_DERIVED_CLASS_NAME);
-            principalDerivedClass = (Class<? extends Function<?, ?>>) Class.forName(PRINCIPAL_DERIVED_CLASS_NAME);
-        } catch (final ClassNotFoundException e) {
-            log.error("Unable to load classes to support instantiation of this plugin type.");
+            String className =
+                    getCustomProperty(getClass().getName() + ".SubjectDerivedAttributeValuesFunction.class", null);
+            if (className != null) {
+                subjectDerivedClass = (Class<? extends Function<?, ?>>) Class.forName(className);
+            } else {
+                throw new ClassNotFoundException();
+            }
+            className =
+                    getCustomProperty(getClass().getName() + ".PrincipalDerivedValuesFunction.class", null);
+            if (className != null) {
+                principalDerivedClass = (Class<? extends Function<?, ?>>) Class.forName(className);
+            } else {
+                throw new ClassNotFoundException();
+            }
+        } catch (final ClassNotFoundException | ClassCastException e) {
+            log.error("Unable to load classes to support instantiation of this plugin type");
         }
     }
     
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/SubjectDataConnectorParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/SubjectDataConnectorParser.java
index 0988375f2..a614c668c 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/SubjectDataConnectorParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/impl/SubjectDataConnectorParser.java
@@ -30,7 +30,6 @@ import net.shibboleth.idp.attribute.resolver.AbstractDataConnector;
 import net.shibboleth.idp.attribute.resolver.dc.impl.ContextDerivedDataConnector;
 import net.shibboleth.idp.attribute.resolver.spring.dc.AbstractDataConnectorParser;
 import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
-import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.spring.util.SpringSupport;
 import net.shibboleth.shared.xml.AttributeSupport;
@@ -43,10 +42,6 @@ public class SubjectDataConnectorParser extends AbstractDataConnectorParser {
     @Nonnull public static final QName TYPE_NAME_RESOLVER =
             new QName(AttributeResolverNamespaceHandler.NAMESPACE, "Subject");
 
-    /** Class name for sourcing attributes from Subject(s). */
-    @Nonnull @NotEmpty private static final String SUBJECT_DERIVED_CLASS_NAME =
-            "net.shibboleth.idp.authn.context.impl.SubjectDerivedAttributesFunction"; 
-
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(SubjectDataConnectorParser.class);
 
@@ -57,9 +52,15 @@ public class SubjectDataConnectorParser extends AbstractDataConnectorParser {
     @SuppressWarnings("unchecked")
     public SubjectDataConnectorParser() {
         try {
-            subjectDerivedClass = (Class<? extends Function<?, ?>>) Class.forName(SUBJECT_DERIVED_CLASS_NAME);
-        } catch (final ClassNotFoundException e) {
-            log.error("Unable to load class to support instantiation of this plugin type.");
+            final String className =
+                    getCustomProperty(getClass().getName() + ".SubjectDerivedAttributesFunction.class", null);
+            if (className != null) {
+                subjectDerivedClass = (Class<? extends Function<?, ?>>) Class.forName(className);
+            } else {
+                throw new ClassNotFoundException();
+            }
+        } catch (final ClassNotFoundException|ClassCastException e) {
+            log.error("Unable to load class to support instantiation of this plugin type");
         }
     }
 

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


More information about the commits mailing list