[java-opensaml] 12/12: IDP-1793 Use Suppliers for HttpRequest/Response

Rod Widdowson rdw at steadingsoftware.com
Wed Aug 10 13:08:25 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-opensaml.

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

commit e6f31833292a1b082e35fe87e5123410eb8b5c7d
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Aug 7 20:00:08 2022 +0100

    IDP-1793  Use Suppliers for HttpRequest/Response
    
    https://shibboleth.atlassian.net/browse/IDP-1793
    
    org.opensaml.storage.impl.client.ClientStorageService
    
    Gains a setter/getter for a Supplier for the HttpServletRequest
    and loses the setter for the raw object.
---
 .../storage/impl/client/ClientStorageService.java  | 42 +++++++++++++---------
 .../AbstractBaseClientStorageServiceTest.java      |  8 +++--
 2 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java
index 4781dacdc..af5ab75a7 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/ClientStorageService.java
@@ -26,6 +26,7 @@ import java.util.TimerTask;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.function.Supplier;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -98,8 +99,8 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     /** Sizes to report for context, key, and value limits when particular sources are used. */
     @Nonnull @NotEmpty private Map<ClientStorageSource,Integer> capabilityMap; 
 
-    /** Servlet request. */
-    @NonnullAfterInit private HttpServletRequest httpServletRequest;
+    /** Servlet request Supplier. */
+    @NonnullAfterInit private Supplier<HttpServletRequest> httpServletRequestSupplier;
     
     /** Manages creation of cookies. */
     @NonnullAfterInit private CookieManager cookieManager;
@@ -162,17 +163,25 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     public boolean isClustered() {
         return true;
     }
-    
 
     /**
-     * Set the servlet request in which to manage per-request data.
+     * Set the Supplier for the servlet request in which to manage per-request data.
      * 
-     * @param request servlet request in which to manage data
+     * @param requestSupplier supplier for the servlet request in which to manage data
      */
-    public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
+    public void setHttpServletRequestSupplier(@Nonnull final Supplier<HttpServletRequest> requestSupplier) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        httpServletRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
+        httpServletRequestSupplier = Constraint.isNotNull(requestSupplier, "HttpServletRequest cannot be null");
+    }
+
+    /**
+     * Get the current HTTP request if available.
+     *
+     * @return current HTTP request
+     */
+    @Nonnull private HttpServletRequest getHttpServletRequest() {
+        return httpServletRequestSupplier.get();
     }
     
     /**
@@ -300,8 +309,8 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
         
-        if (httpServletRequest == null) {
-            throw new ComponentInitializationException("HttpServletRequest must be set");
+        if (httpServletRequestSupplier == null) {
+            throw new ComponentInitializationException("HttpServletRequestSupplier must be set");
         } else if (dataSealer == null || cookieManager == null) {
             throw new ComponentInitializationException("DataSealer and CookieManager must be set");
         }
@@ -316,7 +325,8 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     /** {@inheritDoc} */
     @Override
     @Nonnull protected ReadWriteLock getLock() {
-        final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(), "HttpSession cannot be null");
+        final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(), 
+                "HttpSession cannot be null");
         
         // Uses a lock bound to the session, creating one if this is the first attempt.
         
@@ -341,7 +351,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
             throws IOException {
         
         try {
-            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+            final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(),
                     "HttpSession cannot be null");
             final Object store = Constraint.isNotNull(session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName),
                     "Storage object was not present in session");
@@ -355,7 +365,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
     @Override
     protected void setDirty() throws IOException {
         try {
-            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+            final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(),
                     "HttpSession cannot be null");
 
             final Object store = session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName);
@@ -382,7 +392,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
        try {
            lock.lock();
            
-           final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+           final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(),
                    "HttpSession cannot be null");
            final Object object = session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName);
            if (object != null && object instanceof ClientStorageServiceStore) {
@@ -411,7 +421,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
        try {
            lock.lock();
            
-           final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+           final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(),
                    "HttpSession cannot be null");
            return session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName) instanceof ClientStorageServiceStore;
        } catch (final ConstraintViolationException e) {
@@ -477,7 +487,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
         try {
             lock.lock();
             
-            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+            final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(),
                     "HttpSession cannot be null");
             session.setAttribute(STORAGE_ATTRIBUTE + '.' + storageName, storageObject);
         } finally {
@@ -501,7 +511,7 @@ public class ClientStorageService extends AbstractMapBackedStorageService implem
         try {
             lock.lock();
             
-            final HttpSession session = Constraint.isNotNull(httpServletRequest.getSession(),
+            final HttpSession session = Constraint.isNotNull(getHttpServletRequest().getSession(),
                     "HttpSession cannot be null");
             
             final Object object = session.getAttribute(STORAGE_ATTRIBUTE + '.' + storageName);
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java
index d2862e057..f8c0c88aa 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java
@@ -23,7 +23,9 @@ import org.testng.Assert;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.net.CookieManager;
 import net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestProxy;
+import net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestSupplier;
 import net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletResponseProxy;
+import net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletResponseSupplier;
 import net.shibboleth.utilities.java.support.resource.Resource;
 import net.shibboleth.utilities.java.support.security.DataSealer;
 import net.shibboleth.utilities.java.support.security.impl.BasicKeystoreKeyStrategy;
@@ -53,8 +55,8 @@ public class AbstractBaseClientStorageServiceTest {
         ss.setStorageName(STORAGE_NAME);
 
         final CookieManager cm = new CookieManager();
-        cm.setHttpServletRequest(new ThreadLocalHttpServletRequestProxy());
-        cm.setHttpServletResponse(new ThreadLocalHttpServletResponseProxy());
+        cm.setHttpServletRequestSupplier(new ThreadLocalHttpServletRequestSupplier());
+        cm.setHttpServletResponseSupplier(new ThreadLocalHttpServletResponseSupplier());
         cm.initialize();
         ss.setCookieManager(cm);
 
@@ -77,7 +79,7 @@ public class AbstractBaseClientStorageServiceTest {
 
         ss.setDataSealer(sealer);
         
-        ss.setHttpServletRequest(new ThreadLocalHttpServletRequestProxy());
+        ss.setHttpServletRequestSupplier(new ThreadLocalHttpServletRequestSupplier());
         ss.initialize();
         
         return ss;

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


More information about the commits mailing list