[java-shib-attribute] 01/01: JSATTR-4 Remove springResources from data connector
Rod Widdowson
rdw at steadingsoftware.com
Tue Oct 25 14:54:56 UTC 2022
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch dev/JSATTR-4
in repository java-shib-attribute.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=842e9f8c8def6c357edce212ce57328fac433487
commit 842e9f8c8def6c357edce212ce57328fac433487
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 'searchExecutorRef="bean"'
to the LDAP data connector.
---
.../dc/ldap/impl/LDAPDataConnectorParser.java | 70 ++++++++++++++++++----
.../schema/shibboleth-attribute-resolver.xsd | 20 +++++--
.../dc/ldap/impl/LDAPDataConnectorParserTest.java | 16 +++++
.../ldap-attribute-resolver-spring-context.xml | 2 +-
.../ldap/resolver/ldap-attribute-resolver-ref.xml | 18 ++++++
5 files changed, 110 insertions(+), 16 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..ba6e79d59 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 Executor bean ID
+ */
+ @Nullable public String getBeanSearchOperationID() {
+ return AttributeSupport.getAttributeValue(configElement, null, "searchExecutorRef");
+ }
+
/**
* 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..7a83c8e3b 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="searchExecutorRef" type="resolver:string">
+ <annotation>
+ <documentation>
+ Reference to a Spring bean providing the Search Executor 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..85a9553dc 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
@@ -496,6 +496,22 @@ public class LDAPDataConnectorParserTest {
final Map<String, IdPAttribute> attrs = dataConnector.resolve(context);
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 {
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..ef7a81a1a
--- /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,18 @@
+<?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"
+ searchExecutorRef="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