[java-identity-provider] 13/19: IDP-1793 Use Suppliers for HttpRequest/Response

Rod Widdowson rdw at steadingsoftware.com
Wed Aug 10 13:17:05 UTC 2022


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch maint-4
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=ad0ab72e941e1ee524c5f84163a3d89cb863af10

commit ad0ab72e941e1ee524c5f84163a3d89cb863af10
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Aug 6 14:34:47 2022 +0100

    IDP-1793  Use Suppliers for HttpRequest/Response
    
    https://shibboleth.atlassian.net/browse/IDP-1793
    
    net.shibboleth.idp.session.impl.StorageBackedSessionManager
    looses setters for HttpServletRequest and Response and instead
    gains setters for Suppliers of same.
---
 .../src/test/resources/spring/test-flow-beans.xml  | 10 ++++++++--
 .../shibboleth/idp/conf/session-manager-system.xml |  4 ++--
 .../src/test/resources/test/test-cas-beans.xml     |  4 ++--
 .../session/impl/StorageBackedSessionManager.java  | 23 ++++++++++++----------
 .../StorageBackedIdPSessionSerializerTest.java     | 10 ++++++++--
 .../impl/testing/SessionManagerBaseTestCase.java   |  7 +++++--
 6 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/idp-cas-impl/src/test/resources/spring/test-flow-beans.xml b/idp-cas-impl/src/test/resources/spring/test-flow-beans.xml
index 7880cadfd..e6f4f0060 100644
--- a/idp-cas-impl/src/test/resources/spring/test-flow-beans.xml
+++ b/idp-cas-impl/src/test/resources/spring/test-flow-beans.xml
@@ -31,6 +31,12 @@
     <bean id="shibboleth.StorageService"
           class="org.opensaml.storage.impl.MemoryStorageService" />
 
+    <bean id="shibboleth.HttpServletRequestSupplier"
+          class="net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestProxy" />
+
+    <bean id="shibboleth.HttpServletResponseSupplier"
+          class="net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletResponseProxy" />
+
     <bean id="shibboleth.HttpServletRequest"
           class="net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestProxy" />
 
@@ -51,8 +57,8 @@
           class="net.shibboleth.idp.session.impl.StorageBackedSessionManager"
           p:cookieManager-ref="shibboleth.CookieManager"
           p:storageService-ref="shibboleth.StorageService"
-          p:httpServletRequest-ref="shibboleth.HttpServletRequest"
-          p:httpServletResponse-ref="shibboleth.HttpServletResponse"
+          p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"
+          p:httpServletResponseSupplier-ref="shibboleth.HttpServletResponseSupplier"
           p:consistentAddress="true"
           p:sessionTimeout="PT60M"
           p:sessionSlop="0"
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml
index c2150b286..e893be777 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml
@@ -63,8 +63,8 @@
     
     <bean id="shibboleth.SessionManager" class="net.shibboleth.idp.session.impl.StorageBackedSessionManager"
             depends-on="shibboleth.OpenSAMLConfig"
-            p:httpServletRequest-ref="shibboleth.HttpServletRequest"
-            p:httpServletResponse-ref="shibboleth.HttpServletResponse"
+            p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"
+            p:httpServletResponseSupplier-ref="shibboleth.HttpServletResponseSupplier"
             p:authenticationFlowDescriptors="#{@'shibboleth.AuthenticationFlowDescriptorManager'.getComponents()}"
             p:cookieManager-ref="shibboleth.CookieManager"
             p:cookieName="%{idp.session.cookieName:shib_idp_session}"
diff --git a/idp-conf/src/test/resources/test/test-cas-beans.xml b/idp-conf/src/test/resources/test/test-cas-beans.xml
index 822a42351..13dcea0f6 100644
--- a/idp-conf/src/test/resources/test/test-cas-beans.xml
+++ b/idp-conf/src/test/resources/test/test-cas-beans.xml
@@ -11,8 +11,8 @@
 
     <bean id="shibboleth.SessionManager" class="net.shibboleth.idp.session.impl.StorageBackedSessionManager"
           depends-on="shibboleth.OpenSAMLConfig"
-          p:httpServletRequest-ref="shibboleth.HttpServletRequest"
-          p:httpServletResponse-ref="shibboleth.HttpServletResponse"
+          p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"
+          p:httpServletResponseSupplier-ref="shibboleth.HttpServletResponseSupplier"
           p:authenticationFlowDescriptors="#{@'shibboleth.AuthenticationFlowDescriptorManager'.getComponents().?[id matches 'authn/(' + '%{idp.authn.flows:Password}'.trim() + ')']}"
           p:cookieManager-ref="shibboleth.CookieManager"
           p:storageService-ref="shibboleth.StorageService"
diff --git a/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java b/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
index 365920dd0..6025f3198 100644
--- a/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
+++ b/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Objects;
 import java.util.function.BiPredicate;
+import java.util.function.Supplier;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -121,10 +122,10 @@ public class StorageBackedSessionManager extends AbstractIdentifiableInitializab
     @Nonnull private final Logger log = LoggerFactory.getLogger(StorageBackedSessionManager.class);
 
     /** Servlet request to read from. */
-    @Nullable private HttpServletRequest httpRequest;
+    @Nullable private Supplier<HttpServletRequest> httpRequestSupplier;
 
     /** Servlet response to write to. */
-    @Nullable private HttpServletResponse httpResponse;
+    @Nullable private Supplier<HttpServletResponse> httpResponseSupplier;
 
     /** Inactivity timeout for sessions. */
     @Nonnull private Duration sessionTimeout;
@@ -184,25 +185,25 @@ public class StorageBackedSessionManager extends AbstractIdentifiableInitializab
     }
 
     /**
-     * Set the servlet request to read from.
+     * Set the {@link Supplier} for the servlet request to read from.
      * 
-     * @param request servlet request
+     * @param requestSupplier servlet request Supplier
      */
-    public void setHttpServletRequest(@Nullable final HttpServletRequest request) {
+    public void setHttpServletRequestSupplier(@Nullable final Supplier<HttpServletRequest> requestSupplier) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
-        httpRequest = request;
+        httpRequestSupplier = requestSupplier;
     }
 
     /**
-     * Set the servlet response to write to.
+     * Set the {@link Supplier} for the servlet response to write to.
      * 
-     * @param response servlet response
+     * @param responseSupplier servlet response Supplier
      */
-    public void setHttpServletResponse(@Nullable final HttpServletResponse response) {
+    public void setHttpServletResponseSupplier(@Nullable final Supplier<HttpServletResponse> responseSupplier) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
 
-        httpResponse = response;
+        httpResponseSupplier = responseSupplier;
     }
 
     /**
@@ -518,6 +519,7 @@ public class StorageBackedSessionManager extends AbstractIdentifiableInitializab
             throws SessionException {
         ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
 
+        final HttpServletRequest httpRequest = httpRequestSupplier == null?null:httpRequestSupplier.get();
         if (httpRequest == null) {
             throw new SessionException("No HttpServletRequest available, can't bind to client address");
         }
@@ -586,6 +588,7 @@ public class StorageBackedSessionManager extends AbstractIdentifiableInitializab
         if (criteria != null) {
             final HttpServletRequestCriterion requestCriterion = criteria.get(HttpServletRequestCriterion.class);
             if (requestCriterion != null) {
+                final HttpServletRequest httpRequest = httpRequestSupplier == null?null:httpRequestSupplier.get();
                 if (httpRequest != null) {
                     final Cookie[] cookies = httpRequest.getCookies();
                     if (cookies != null) {
diff --git a/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/StorageBackedIdPSessionSerializerTest.java b/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/StorageBackedIdPSessionSerializerTest.java
index 30e667515..f35c9ae24 100644
--- a/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/StorageBackedIdPSessionSerializerTest.java
+++ b/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/StorageBackedIdPSessionSerializerTest.java
@@ -22,6 +22,10 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.time.Instant;
+import java.util.function.Supplier;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.opensaml.storage.impl.MemoryStorageService;
 import org.testng.Assert;
@@ -68,8 +72,10 @@ public class StorageBackedIdPSessionSerializerTest {
         manager = new StorageBackedSessionManager();
         manager.setStorageService(storageService);
         manager.setIDGenerator(new SecureRandomIdentifierGenerationStrategy());
-        manager.setHttpServletRequest(new ThreadLocalHttpServletRequestProxy());
-        manager.setHttpServletResponse(new ThreadLocalHttpServletResponseProxy());
+        final HttpServletRequest requestProxy = new ThreadLocalHttpServletRequestProxy();
+        manager.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() {return requestProxy;}});
+        final HttpServletResponse responseProxy = new ThreadLocalHttpServletResponseProxy();
+        manager.setHttpServletResponseSupplier(new Supplier<>() {public HttpServletResponse get() {return responseProxy;}});
         manager.setCookieManager(cookieManager);
         manager.setId("Test Session Manager");
         manager.setTrackSPSessions(true);
diff --git a/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/testing/SessionManagerBaseTestCase.java b/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/testing/SessionManagerBaseTestCase.java
index 55f3bd6df..ff60f8f16 100644
--- a/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/testing/SessionManagerBaseTestCase.java
+++ b/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/testing/SessionManagerBaseTestCase.java
@@ -18,9 +18,12 @@
 package net.shibboleth.idp.session.impl.testing;
 
 import java.time.Duration;
+import java.util.function.Supplier;
 
 import javax.annotation.Nonnull;
 import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import net.shibboleth.idp.session.SessionException;
 import net.shibboleth.idp.session.impl.StorageBackedSessionManager;
@@ -66,8 +69,8 @@ public class SessionManagerBaseTestCase extends OpenSAMLInitBaseTestCase {
         sessionManager.setSessionTimeout(Duration.ofSeconds(15));
         sessionManager.setStorageService(storageService);
         sessionManager.setIDGenerator(new SecureRandomIdentifierGenerationStrategy());
-        sessionManager.setHttpServletRequest(requestProxy);
-        sessionManager.setHttpServletResponse(responseProxy);
+        sessionManager.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() {return requestProxy;}});
+        sessionManager.setHttpServletResponseSupplier(new Supplier<>() {public HttpServletResponse get() {return responseProxy;}});
         sessionManager.setCookieManager(cookieManager);
         sessionManager.setId("Test Session Manager");
 

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


More information about the commits mailing list