[java-shib-metadata] branch main updated: IDP-2486 - Adjust default UserAgent handling in IdP to be extensible

Codeberg noreply at shibboleth.net
Thu Oct 15 19:05:21 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/d0b9dea598be1303a6498961afb2411392fc61af

The following commit(s) were added to refs/heads/main by this push:
     new d0b9dea5 IDP-2486 - Adjust default UserAgent handling in IdP to be extensible
d0b9dea5 is described below

commit d0b9dea598be1303a6498961afb2411392fc61af
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Thu Oct 15 14:42:06 2026 -0400

    IDP-2486 - Adjust default UserAgent handling in IdP to be extensible
    
    https://shibboleth.atlassian.net/browse/IDP-2486
    
    Deprecate our subclassed HttpClient factories.
    Alter metadata parsers to indirect in a User-Agent bean.
---
 .../spring/http/FileCachingHttpClientFactoryBean.java    | 14 ++++++++++----
 .../shibboleth/spring/http/HttpClientFactoryBean.java    | 14 ++++++++++----
 .../http/InMemoryCachingHttpClientFactoryBean.java       | 16 +++++++++++-----
 .../AbstractDynamicHTTPMetadataProviderParser.java       | 15 ++++++++++++---
 .../spring/metadata/HTTPMetadataProviderParser.java      | 12 ++++++++++--
 .../metadata/HTTPMetadataProvidersParserSupport.java     |  7 ++++++-
 6 files changed, 59 insertions(+), 19 deletions(-)

diff --git a/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/FileCachingHttpClientFactoryBean.java b/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/FileCachingHttpClientFactoryBean.java
index 1f33f7c4..77b34491 100644
--- a/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/FileCachingHttpClientFactoryBean.java
+++ b/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/FileCachingHttpClientFactoryBean.java
@@ -15,18 +15,24 @@
 package net.shibboleth.spring.http;
 
 import net.shibboleth.saml.metadata.Version;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
  * Factory bean customization for the Shibboleth IdP.
+ * 
+ * @deprecated
  */
+ at Deprecated(since="5.3.0", forRemoval=true)
 public class FileCachingHttpClientFactoryBean 
         extends net.shibboleth.shared.spring.httpclient.factory.FileCachingHttpClientFactoryBean {
     
-    /**
-     * Constructor.
-     *
-     */
+    /** Default constructor. */
+    @Deprecated(since="5.3.0", forRemoval=true)
     public FileCachingHttpClientFactoryBean() {
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName() , null,
+                net.shibboleth.shared.spring.httpclient.factory.FileCachingHttpClientFactoryBean.class.getName());
+
         final StringBuilder stringBuilder = new StringBuilder("Shibboleth/");
         stringBuilder.append(Version.getVersion())
             .append(" OpenSAML/")
diff --git a/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/HttpClientFactoryBean.java b/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/HttpClientFactoryBean.java
index 669ab8e5..1d3ab8e2 100644
--- a/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/HttpClientFactoryBean.java
+++ b/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/HttpClientFactoryBean.java
@@ -15,17 +15,23 @@
 package net.shibboleth.spring.http;
 
 import net.shibboleth.saml.metadata.Version;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
  * Factory bean customization for the Shibboleth IdP.
+ * 
+ * @deprecated
  */
+ at Deprecated(since="5.3.0", forRemoval=true)
 public class HttpClientFactoryBean extends net.shibboleth.shared.spring.httpclient.factory.HttpClientFactoryBean {
 
-    /**
-     * Constructor.
-     *
-     */
+    /** Default constructor. */
+    @Deprecated(since="5.3.0", forRemoval=true)
     public HttpClientFactoryBean() {
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName() , null,
+                net.shibboleth.shared.spring.httpclient.factory.HttpClientFactoryBean.class.getName());
+        
         final StringBuilder stringBuilder = new StringBuilder("Shibboleth/");
         stringBuilder.append(Version.getVersion())
             .append(" OpenSAML/")
diff --git a/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/InMemoryCachingHttpClientFactoryBean.java b/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/InMemoryCachingHttpClientFactoryBean.java
index f0c2a16f..b59a7411 100644
--- a/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/InMemoryCachingHttpClientFactoryBean.java
+++ b/shib-metadata-spring/src/main/java/net/shibboleth/spring/http/InMemoryCachingHttpClientFactoryBean.java
@@ -15,18 +15,24 @@
 package net.shibboleth.spring.http;
 
 import net.shibboleth.saml.metadata.Version;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
- *  Factory bean customization for the Shibboleth IdP.
+ * Factory bean customization for the Shibboleth IdP.
+ * 
+ * @deprecated
  */
+ at Deprecated(since="5.3.0", forRemoval=true)
 public class InMemoryCachingHttpClientFactoryBean 
         extends net.shibboleth.shared.spring.httpclient.factory.InMemoryCachingHttpClientFactoryBean {
     
-    /**
-     * Constructor.
-     *
-     */
+    /** Default constructor. */
+    @Deprecated(since="5.3.0", forRemoval=true)
     public InMemoryCachingHttpClientFactoryBean() {
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName() , null,
+                net.shibboleth.shared.spring.httpclient.factory.InMemoryCachingHttpClientFactoryBean.class.getName());
+
         final StringBuilder stringBuilder = new StringBuilder("Shibboleth/");
         stringBuilder.append(Version.getVersion())
             .append(" OpenSAML/")
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 f477af1e..67634cb6 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
@@ -27,11 +27,11 @@ import org.w3c.dom.Element;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.spring.httpclient.factory.HttpClientFactoryBean;
+import net.shibboleth.shared.spring.httpclient.factory.InMemoryCachingHttpClientFactoryBean;
 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;
 
 /**
  * Parser for abstract dynamic HTTP metadata resolvers.
@@ -72,6 +72,14 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
     /** Logger. */
     private final Logger log = LoggerFactory.getLogger(AbstractDynamicHTTPMetadataProviderParser.class);
 
+    /** Bean ID for defaulted User-Agent string. */
+    @Nullable private final String userAgentBeanID;
+
+    /** Constructor. */
+    public AbstractDynamicHTTPMetadataProviderParser() {
+        userAgentBeanID = getCustomProperty(AbstractDynamicHTTPMetadataProviderParser.class.getName() + ".UserAgent.bean", null);
+    }
+    
 // Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
     @Override protected void doNativeParse(@Nonnull final Element element, @Nonnull final ParserContext parserContext,
@@ -142,7 +150,8 @@ public abstract class AbstractDynamicHTTPMetadataProviderParser extends Abstract
                 HTTPMetadataProvidersParserSupport.buildCommonClientBuilder(element,
                         parserContext,
                         useCachingHttpClient ? DEFAULT_CACHING_CLIENT_CLASS : DEFAULT_NON_CACHING_CLIENT_CLASS,
-                        httpClientSecurityParameters);
+                        httpClientSecurityParameters,
+                        userAgentBeanID);
 
         // Set up non standard defaults
         if (!element.hasAttributeNS(null, "connectionTimeout")) {
diff --git a/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProviderParser.java b/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProviderParser.java
index c9ef06bc..3f0ab9f6 100644
--- a/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProviderParser.java
+++ b/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProviderParser.java
@@ -25,9 +25,9 @@ import org.w3c.dom.Element;
 
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.spring.httpclient.factory.HttpClientFactoryBean;
 import net.shibboleth.shared.xml.AttributeSupport;
 import net.shibboleth.shared.xml.ElementSupport;
-import net.shibboleth.spring.http.HttpClientFactoryBean;
 
 /**
  * Parser for a FilesystemMetadataProvider.
@@ -40,6 +40,14 @@ public abstract class HTTPMetadataProviderParser extends AbstractReloadingMetada
     /** Logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPMetadataProviderParser.class);
 
+    /** Bean ID for defaulted User-Agent string. */
+    @Nullable private final String userAgentBeanID;
+    
+    /** Constructor. */
+    public HTTPMetadataProviderParser() {
+        userAgentBeanID = getCustomProperty(HTTPMetadataProviderParser.class.getName() + ".UserAgent.bean", null);
+    }
+    
     /** {@inheritDoc} */
     @Override protected void doNativeParse(@Nonnull final Element element, @Nonnull final ParserContext parserContext,
             @Nonnull final BeanDefinitionBuilder builder) {
@@ -91,7 +99,7 @@ public abstract class HTTPMetadataProviderParser extends AbstractReloadingMetada
             @Nonnull final ParserContext parserContext, @Nullable final BeanDefinition httpClientSecurityParameters) {
 
         return HTTPMetadataProvidersParserSupport.buildCommonClientBuilder(element, parserContext,
-                HTTPMetadataProviderParser.DEFAULT_CLIENT_CLASS, httpClientSecurityParameters).getBeanDefinition();
+                HTTPMetadataProviderParser.DEFAULT_CLIENT_CLASS, httpClientSecurityParameters, userAgentBeanID).getBeanDefinition();
     }
     
 }
\ No newline at end of file
diff --git a/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProvidersParserSupport.java b/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProvidersParserSupport.java
index 794c0105..8b7e8151 100644
--- a/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProvidersParserSupport.java
+++ b/shib-metadata-spring/src/main/java/net/shibboleth/spring/metadata/HTTPMetadataProvidersParserSupport.java
@@ -168,12 +168,13 @@ public final class HTTPMetadataProvidersParserSupport {
      * @param parserContext context
      * @param clientBuildClass the type of builder to create.
      * @param httpClientSecurityParameters the client security parameters to be used
+     * @param userAgentBeanID optional bean ID of a UserAgent source to install
      * 
      * @return an appropriate builder
      */
     @Nonnull protected static BeanDefinitionBuilder buildCommonClientBuilder(@Nonnull final Element element,
             @Nonnull final ParserContext parserContext, @Nonnull final Class<?> clientBuildClass,
-            @Nullable final BeanDefinition httpClientSecurityParameters) {
+            @Nullable final BeanDefinition httpClientSecurityParameters, @Nullable final String userAgentBeanID) {
 
         final BeanDefinitionBuilder clientBuilder = BeanDefinitionBuilder.genericBeanDefinition(clientBuildClass);
 
@@ -224,6 +225,10 @@ public final class HTTPMetadataProvidersParserSupport {
         if (element.hasAttributeNS(null, "proxyPassword")) {
             clientBuilder.addPropertyValue("connectionProxyPassword", element.getAttributeNS(null, "proxyPassword"));
         }
+        
+        if (userAgentBeanID != null) {
+            clientBuilder.addPropertyReference("userAgent", userAgentBeanID);
+        }
 
         return clientBuilder;
     }

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


More information about the commits mailing list