[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