[java-shib-attribute] branch main updated: JSATTR-4 Remove springResources from data connector
Rod Widdowson
rdw at steadingsoftware.com
Wed Oct 26 13:18:16 UTC 2022
This is an automated email from the git hooks/post-receive script.
rdw 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=2c02143bc38e1f419b97be70aa9050a6509529c8
The following commit(s) were added to refs/heads/main by this push:
new 2c02143bc JSATTR-4 Remove springResources from data connector
2c02143bc is described below
commit 2c02143bc38e1f419b97be70aa9050a6509529c8
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Oct 25 14:57:17 2022 +0100
JSATTR-4 Remove springResources from data connector
https://shibboleth.atlassian.net/browse/JSATTR-4
Add 'connectionFactoryRef="bean"' and 'searchOperatorRef="bean"'
to the LDAP data connector.
---
.../dc/ldap/impl/LDAPDataConnectorParser.java | 70 ++++++++++++++++++----
.../schema/shibboleth-attribute-resolver.xsd | 20 +++++--
.../dc/ldap/impl/LDAPDataConnectorParserTest.java | 21 ++++++-
.../ldap-attribute-resolver-spring-context.xml | 2 +-
.../ldap/resolver/ldap-attribute-resolver-ref.xml | 14 +++++
5 files changed, 108 insertions(+), 19 deletions(-)
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
index 16a0da0fd..3e29202e5 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
@@ -154,19 +154,30 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
}
}
- final BeanDefinitionBuilder connectionFactory =
- BeanDefinitionBuilder.genericBeanDefinition(DefaultConnectionFactory.class);
- connectionFactory.addConstructorArgValue(v2Parser.createConnectionConfig(parserContext));
-
- final BeanDefinition pooledConnectionFactory = v2Parser.createPooledConnectionFactory(parserContext);
- if (pooledConnectionFactory != null) {
- builder.addPropertyValue("connectionFactory", pooledConnectionFactory);
+ final String connectionFactoryID = v2Parser.getBeanConnectionFactoryID();
+ BeanDefinition pooledConnectionFactory = null;
+ BeanDefinitionBuilder connectionFactory = null;
+ if (connectionFactoryID != null) {
+ builder.addPropertyReference("connectionFactory", connectionFactoryID);
} else {
- builder.addPropertyValue("connectionFactory", connectionFactory.getBeanDefinition());
+ connectionFactory =
+ BeanDefinitionBuilder.genericBeanDefinition(DefaultConnectionFactory.class);
+ connectionFactory.addConstructorArgValue(v2Parser.createConnectionConfig(parserContext));
+ pooledConnectionFactory = v2Parser.createPooledConnectionFactory(parserContext);
+ if (pooledConnectionFactory != null) {
+ builder.addPropertyValue("connectionFactory", pooledConnectionFactory);
+ } else {
+ builder.addPropertyValue("connectionFactory", connectionFactory.getBeanDefinition());
+ }
}
- final BeanDefinition searchOperation = v2Parser.createSearchOperation();
- builder.addPropertyValue("searchOperation", searchOperation);
+ final String searchOperationID = v2Parser.getBeanSearchOperationID();
+ if (searchOperationID!= null) {
+ builder.addPropertyReference("searchOperation", searchOperationID);
+ } else {
+ final BeanDefinition searchOperation = v2Parser.createSearchOperation();
+ builder.addPropertyValue("searchOperation", searchOperation);
+ }
final String mappingStrategyID = AttributeSupport.getAttributeValue(config, new QName("mappingStrategyRef"));
if (mappingStrategyID != null) {
@@ -182,7 +193,10 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
if (validatorID != null) {
builder.addPropertyReference("validator", validatorID);
} else {
- if (pooledConnectionFactory != null) {
+ if (connectionFactoryID != null) {
+ builder.addPropertyValue("validator", v2Parser.createValidator(connectionFactoryID));
+ }
+ else if (pooledConnectionFactory != null) {
builder.addPropertyValue("validator", v2Parser.createValidator(pooledConnectionFactory));
} else {
builder.addPropertyValue("validator", v2Parser.createValidator(connectionFactory.getBeanDefinition()));
@@ -436,6 +450,24 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
return AttributeSupport.getAttributeValue(configElement, null, "executableSearchBuilderRef");
}
+ /**
+ * Get the bean ID of an externally defined Connection Factory
+ *
+ * @return Connection Factory bean ID
+ */
+ @Nullable public String getBeanConnectionFactoryID() {
+ return AttributeSupport.getAttributeValue(configElement, null, "connectionFactoryRef");
+ }
+
+ /**
+ * Get the bean ID of an externally defined Search Operation
+ *
+ * @return Search Operation bean ID
+ */
+ @Nullable public String getBeanSearchOperationID() {
+ return AttributeSupport.getAttributeValue(configElement, null, "searchOperatorRef");
+ }
+
/**
* Construct the definition of the template driven search builder.
*
@@ -771,6 +803,22 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
return mapper.getBeanDefinition();
}
+ /**
+ * Create the validator. See {@link net.shibboleth.idp.attribute.resolver.dc.Validator}.
+ *
+ * @param connectionFactoryId reference to provide to the validator
+ *
+ * @return validator
+ */
+ @Nullable public BeanDefinition createValidator(final String connectionFactoryId) {
+
+ final BeanDefinitionBuilder validator =
+ BeanDefinitionBuilder.genericBeanDefinition(ConnectionFactoryValidator.class);
+
+ validator.addPropertyReference("connectionFactory", connectionFactoryId);
+ return validator.getBeanDefinition();
+ }
+
/**
* Create the validator. See {@link net.shibboleth.idp.attribute.resolver.dc.Validator}.
*
diff --git a/shib-attribute-resolver-spring/src/main/resources/schema/shibboleth-attribute-resolver.xsd b/shib-attribute-resolver-spring/src/main/resources/schema/shibboleth-attribute-resolver.xsd
index 5341fd526..efcda8f00 100644
--- a/shib-attribute-resolver-spring/src/main/resources/schema/shibboleth-attribute-resolver.xsd
+++ b/shib-attribute-resolver-spring/src/main/resources/schema/shibboleth-attribute-resolver.xsd
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<schema xmlns="http://www.w3.org/2001/XMLSchema"
- xmlns:resolver="urn:mace:shibboleth:2.0:resolver"
- xmlns:sec="urn:mace:shibboleth:2.0:security"
- targetNamespace="urn:mace:shibboleth:2.0:resolver"
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:resolver="urn:mace:shibboleth:2.0:resolver"
+ xmlns:sec="urn:mace:shibboleth:2.0:security" targetNamespace="urn:mace:shibboleth:2.0:resolver"
elementFormDefault="qualified" version="4.3">
<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
@@ -1060,6 +1058,20 @@
</documentation>
</annotation>
</attribute>
+ <attribute name="connectionFactoryRef" type="resolver:string">
+ <annotation>
+ <documentation>
+ Reference to a Spring bean providing the Connection Factory implementation to use.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="searchOperatorRef" type="resolver:string">
+ <annotation>
+ <documentation>
+ Reference to a Spring bean providing the Search Operator implementation to use.
+ </documentation>
+ </annotation>
+ </attribute>
<attribute name="validatorRef" type="resolver:string">
<annotation>
<documentation>
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
index b7fbc9081..9cfa500e7 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
@@ -38,15 +38,14 @@ import org.ldaptive.BindConnectionInitializer;
import org.ldaptive.BindResponse;
import org.ldaptive.ConnectionConfig;
import org.ldaptive.DefaultConnectionFactory;
-import org.ldaptive.RandomConnectionStrategy;
import org.ldaptive.PooledConnectionFactory;
+import org.ldaptive.RandomConnectionStrategy;
+import org.ldaptive.SearchConnectionValidator;
import org.ldaptive.SearchOperation;
import org.ldaptive.filter.EqualityFilter;
-import org.ldaptive.SearchConnectionValidator;
import org.ldaptive.pool.IdlePruneStrategy;
import org.ldaptive.referral.FollowSearchReferralHandler;
import org.ldaptive.sasl.DefaultSaslClientRequest;
-import org.ldaptive.sasl.DigestMD5BindRequest;
import org.ldaptive.sasl.Mechanism;
import org.ldaptive.sasl.QualityOfProtection;
import org.ldaptive.sasl.SaslClient;
@@ -497,6 +496,22 @@ public class LDAPDataConnectorParserTest {
assertNotNull(attrs);
}
+ @Test public void refConfig() throws Exception {
+ final LDAPDataConnector dataConnector =
+ getLdapDataConnector(new String[] {"net/shibboleth/idp/attribute/resolver/spring/dc/ldap/resolver/ldap-attribute-resolver-ref.xml",
+ "net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml"});
+ assertNotNull(dataConnector);
+ doTest(dataConnector);
+
+ dataConnector.initialize();
+ final AttributeResolutionContext context =
+ TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
+ TestSources.SP_ENTITY_ID);
+ final Map<String, IdPAttribute> attrs = dataConnector.resolve(context);
+ assertNotNull(attrs);
+ }
+
+
@Test public void springPropsConfig() throws Exception,
ResolutionException {
final Resource props = new ClassPathResource("net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-v3.properties");
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
index e156f4a73..f49b24598 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
@@ -44,7 +44,7 @@
p:idleTime="PT10M" />
</property>
</bean>
- <bean class="org.ldaptive.SearchOperation">
+ <bean id="searchOperation" class="org.ldaptive.SearchOperation">
<property name="request">
<bean class="org.ldaptive.SearchRequest" p:baseDn="ou=people,dc=shibboleth,dc=net" p:returnAttributes="uid,homephone,mail" p:timeLimit="PT7S" />
</property>
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/resolver/ldap-attribute-resolver-ref.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/resolver/ldap-attribute-resolver-ref.xml
new file mode 100644
index 000000000..1341d70da
--- /dev/null
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/resolver/ldap-attribute-resolver-ref.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<AttributeResolver xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="urn:mace:shibboleth:2.0:security"
+ xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd
+ urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd">
+ <DataConnector id="myLDAP" xsi:type="LDAPDirectory"
+ executableSearchBuilderRef="filter"
+ noRetryDelay="PT5M"
+ mappingStrategyRef="mappings"
+ connectionFactoryRef="connectionFactory"
+ searchOperatorRef="searchOperation"
+ validatorRef="validator">
+ <ResultCache cacheManagerRef="cache"/>
+ </DataConnector>
+</AttributeResolver>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list