[java-shib-metadata] branch main updated: JSMD-10: Consider whether to switch to non-caching HttpClient ...
Codeberg
noreply at shibboleth.net
Wed Jan 14 02:37:26 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-shib-metadata.
View the commit online:
https://codeberg.org/Shibboleth/java-shib-metadata/commit/9448897a098c28d77e59331ec8b14a221815a4b1
The following commit(s) were added to refs/heads/main by this push:
new 9448897a JSMD-10: Consider whether to switch to non-caching HttpClient ...
9448897a is described below
commit 9448897a098c28d77e59331ec8b14a221815a4b1
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Tue Jan 13 20:29:25 2026 -0500
JSMD-10: Consider whether to switch to non-caching HttpClient ...
Consider whether to switch to non-caching HttpClient in dynamic
provider.
Added flag to control behavior.
---
.../AbstractDynamicHTTPMetadataProviderParser.java | 25 +++++++++++----
.../main/resources/schema/shibboleth-metadata.xsd | 6 ++++
.../DynamicHTTPMetadataProviderParserTest.java | 36 ++++++++++++++++++++++
.../dynamic-httpCaching-noneViaAttribute.xml | 17 ++++++++++
.../metadata/dynamic-httpCaching-viaAttribute.xml | 17 ++++++++++
5 files changed, 95 insertions(+), 6 deletions(-)
diff --git a/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/AbstractDynamicHTTPMetadataProviderParser.java b/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/AbstractDynamicHTTPMetadataProviderParser.java
index e94062fe..f477af1e 100644
--- a/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/AbstractDynamicHTTPMetadataProviderParser.java
+++ b/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/AbstractDynamicHTTPMetadataProviderParser.java
@@ -30,6 +30,7 @@ import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.spring.util.SpringSupport;
import net.shibboleth.shared.xml.AttributeSupport;
import net.shibboleth.shared.xml.ElementSupport;
+import net.shibboleth.spring.http.HttpClientFactoryBean;
import net.shibboleth.spring.http.InMemoryCachingHttpClientFactoryBean;
/**
@@ -37,8 +38,14 @@ import net.shibboleth.spring.http.InMemoryCachingHttpClientFactoryBean;
*/
public abstract class AbstractDynamicHTTPMetadataProviderParser extends AbstractDynamicMetadataProviderParser {
- /** Default caching type . */
- @Nonnull private static final Class<?> DEFAULT_CACHING_CLASS = InMemoryCachingHttpClientFactoryBean.class;
+ /** Default flag for use of caching HttpClient. */
+ @Nonnull private static final Boolean DEFAULT_USE_CACHING_HTTP_CLIENT = Boolean.TRUE;
+
+ /** Default caching HttpClient class. */
+ @Nonnull private static final Class<?> DEFAULT_CACHING_CLIENT_CLASS = InMemoryCachingHttpClientFactoryBean.class;
+
+ /** Default non-caching HttpClient class. */
+ @Nonnull private static final Class<?> DEFAULT_NON_CACHING_CLIENT_CLASS = HttpClientFactoryBean.class;
/** Default max total connections. */
@Nonnull private static final Integer DEFAULT_MAX_CONNECTIONS_TOTAL = 100;
@@ -83,7 +90,8 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
if (element.hasAttributeNS(null, "httpClientRef")) {
builder.addConstructorArgReference(
AttributeSupport.ensureAttributeValue(element, null, "httpClientRef"));
- if (element.hasAttributeNS(null, "connectionTimeout")
+ if (element.hasAttributeNS(null, "useCachingHttpClient")
+ || element.hasAttributeNS(null, "connectionTimeout")
|| element.hasAttributeNS(null, "connectionRequestTimeout")
|| element.hasAttributeNS(null, "socketTimeout")
|| element.hasAttributeNS(null, "responseTimeout")
@@ -94,8 +102,8 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
|| element.hasAttributeNS(null, "disregardTLSCertificate")
|| element.hasAttributeNS(null, "proxyHost") || element.hasAttributeNS(null, "proxyPort")
|| element.hasAttributeNS(null, "proxyUser") || element.hasAttributeNS(null, "proxyPassword")) {
- log.warn("httpClientRef overrides settings for connectionTimeout, responseTimeout, "
- + "requestTimeout, requestTimeoutCorePoolSize, "
+ log.warn("httpClientRef overrides settings for useCachingHttpClient, "
+ + "connectionTimeout, responseTimeout, requestTimeout, requestTimeoutCorePoolSize, "
+ "connectionRequestTimeout, socketTimeout, maxConnectionsTotal, maxConnectionsPerRoute, "
+ "disregardTLSCertificate, proxyHost, proxyPort, "
+ "proxyUser and proxyPassword");
@@ -125,10 +133,15 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
@Nonnull private BeanDefinition buildHttpClient(@Nonnull final Element element,
@Nonnull final ParserContext parserContext, @Nullable final BeanDefinition httpClientSecurityParameters) {
+ Boolean useCachingHttpClient = StringSupport.booleanOf(element.getAttributeNS(null, "useCachingHttpClient"));
+ if (useCachingHttpClient == null ) {
+ useCachingHttpClient = DEFAULT_USE_CACHING_HTTP_CLIENT;
+ }
+
final BeanDefinitionBuilder clientBuilder =
HTTPMetadataProvidersParserSupport.buildCommonClientBuilder(element,
parserContext,
- DEFAULT_CACHING_CLASS ,
+ useCachingHttpClient ? DEFAULT_CACHING_CLIENT_CLASS : DEFAULT_NON_CACHING_CLIENT_CLASS,
httpClientSecurityParameters);
// Set up non standard defaults
diff --git a/shib-metadata-spring/src/main/resources/schema/shibboleth-metadata.xsd b/shib-metadata-spring/src/main/resources/schema/shibboleth-metadata.xsd
index cc5eb363..45c77ce2 100644
--- a/shib-metadata-spring/src/main/resources/schema/shibboleth-metadata.xsd
+++ b/shib-metadata-spring/src/main/resources/schema/shibboleth-metadata.xsd
@@ -531,6 +531,12 @@
<documentation>Password for the HTTP proxy through which connections will be made.</documentation>
</annotation>
</attribute>
+ <attribute name="useCachingHttpClient" type="shibmd:string">
+ <annotation>
+ <documentation>Flag indicating whether to use a caching HttpClient instance.
+ Defaults to: true</documentation>
+ </annotation>
+ </attribute>
<!-- Need to deal with socket factory -->
</extension>
</complexContent>
diff --git a/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/DynamicHTTPMetadataProviderParserTest.java b/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/DynamicHTTPMetadataProviderParserTest.java
index fbe796c5..21e03b75 100644
--- a/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/DynamicHTTPMetadataProviderParserTest.java
+++ b/shib-metadata-spring/src/test/java/net/shibboleth/spring/metadata/DynamicHTTPMetadataProviderParserTest.java
@@ -333,6 +333,42 @@ public class DynamicHTTPMetadataProviderParserTest extends AbstractMetadataParse
Assert.assertEquals(ed.getEntityID(), entityID);
}
+ @Test
+ public void testHttpCachingNoneViaAttribute() throws Exception {
+ MockPropertySource propSource = singletonPropertySource(PROP_MDURL,
+ RepositorySupport.buildHTTPResourceURL(REPO_OPENSAML, TEMPLATE_URL, false));
+
+ final FunctionDrivenDynamicHTTPMetadataResolver resolver = getBean(FunctionDrivenDynamicHTTPMetadataResolver.class,
+ propSource, "dynamic-httpCaching-noneViaAttribute.xml", "beans.xml", "httpClient.xml");
+
+ final String entityID = "https://www.example.org/sp";
+
+ final CriteriaSet criteriaSet = new CriteriaSet( new EntityIdCriterion(entityID));
+
+ final EntityDescriptor ed = resolver.resolveSingle(criteriaSet);
+ Assert.assertNotNull(ed);
+ assert ed != null;
+ Assert.assertEquals(ed.getEntityID(), entityID);
+ }
+
+ @Test
+ public void testHttpCachingViaAttribute() throws Exception {
+ MockPropertySource propSource = singletonPropertySource(PROP_MDURL,
+ RepositorySupport.buildHTTPResourceURL(REPO_OPENSAML, TEMPLATE_URL, false));
+
+ final FunctionDrivenDynamicHTTPMetadataResolver resolver = getBean(FunctionDrivenDynamicHTTPMetadataResolver.class,
+ propSource, "dynamic-httpCaching-viaAttribute.xml", "beans.xml", "httpClient.xml");
+
+ final String entityID = "https://www.example.org/sp";
+
+ final CriteriaSet criteriaSet = new CriteriaSet( new EntityIdCriterion(entityID));
+
+ final EntityDescriptor ed = resolver.resolveSingle(criteriaSet);
+ Assert.assertNotNull(ed);
+ assert ed != null;
+ Assert.assertEquals(ed.getEntityID(), entityID);
+ }
+
@Test
public void testHttpCachingMemory() throws Exception {
MockPropertySource propSource = singletonPropertySource(PROP_MDURL,
diff --git a/shib-metadata-spring/src/test/resources/net/shibboleth/spring/metadata/dynamic-httpCaching-noneViaAttribute.xml b/shib-metadata-spring/src/test/resources/net/shibboleth/spring/metadata/dynamic-httpCaching-noneViaAttribute.xml
new file mode 100644
index 00000000..ca5b9fc9
--- /dev/null
+++ b/shib-metadata-spring/src/test/resources/net/shibboleth/spring/metadata/dynamic-httpCaching-noneViaAttribute.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata:MetadataProvider xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
+ xmlns:metadata="urn:mace:shibboleth:2.0:metadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd
+ urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd"
+
+ id="dynamicHttpCachingNone"
+ useCachingHttpClient="false"
+ xsi:type="metadata:DynamicHTTPMetadataProvider" >
+
+ <!-- Note: use of the transformRef here is mostly just to facilitate testing. -->
+ <metadata:Template transformRef="digester.SHA1HexLower">
+ %{metadataURL}
+ </metadata:Template>
+
+</metadata:MetadataProvider>
+
\ No newline at end of file
diff --git a/shib-metadata-spring/src/test/resources/net/shibboleth/spring/metadata/dynamic-httpCaching-viaAttribute.xml b/shib-metadata-spring/src/test/resources/net/shibboleth/spring/metadata/dynamic-httpCaching-viaAttribute.xml
new file mode 100644
index 00000000..5472e0bc
--- /dev/null
+++ b/shib-metadata-spring/src/test/resources/net/shibboleth/spring/metadata/dynamic-httpCaching-viaAttribute.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata:MetadataProvider xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
+ xmlns:metadata="urn:mace:shibboleth:2.0:metadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd
+ urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd"
+
+ id="dynamicHttpCachingNone"
+ useCachingHttpClient="true"
+ xsi:type="metadata:DynamicHTTPMetadataProvider" >
+
+ <!-- Note: use of the transformRef here is mostly just to facilitate testing. -->
+ <metadata:Template transformRef="digester.SHA1HexLower">
+ %{metadataURL}
+ </metadata:Template>
+
+</metadata:MetadataProvider>
+
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list