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

Rod Widdowson rdw at steadingsoftware.com
Sat Jan 7 14:23:06 UTC 2023


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=49c40504a2384bacd9790af04464d9880d28d732

commit 49c40504a2384bacd9790af04464d9880d28d732
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Jan 6 15:43:14 2023 +0000

    IDP-1793 Use Suppliers for HttpRequest/Response
    
    https://shibboleth.atlassian.net/browse/IDP-1793
    
    Two missed interfaces:
            HttpServletMessageErrorHandler & HTTPRequestValidationHandler
    Two missed classes
            AbstractHttpServletMessageErrorHandler & IPRangePredicate
---
 .../AbstractHttpServletMessageErrorHandler.java    | 43 ++++++++++++-----
 .../servlet/HttpServletMessageErrorHandler.java    | 24 +++++++++-
 .../handler/impl/HTTPRequestValidationHandler.java | 56 ++++++++++++++--------
 .../opensaml/profile/logic/IPRangePredicate.java   | 29 ++++++++---
 4 files changed, 112 insertions(+), 40 deletions(-)

diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java
index d9356cedb..57daa04cf 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java
@@ -17,40 +17,57 @@
 
 package org.opensaml.messaging.error.servlet;
 
+import java.util.function.Supplier;
+
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
+
 
 /**
  * Abstract implementation of {@link HttpServletMessageErrorHandler}.
  */
 public abstract class AbstractHttpServletMessageErrorHandler implements HttpServletMessageErrorHandler {
     
-    /** The HTTP servlet request. */
-    private HttpServletRequest request;
+    /** The HTTP servlet request Supplier. */
+    private Supplier<HttpServletRequest> requestSupplier;
     
-    /** The HTTP servlet response. */
-    private HttpServletResponse response;
+    /** The HTTP servlet response Supplier. */
+    private Supplier<HttpServletResponse> responseSupplier;
 
     /** {@inheritDoc} */
-    @Nullable public HttpServletRequest getHttpServletRequest() {
-        return request;
+    @Override @Nullable public HttpServletRequest getHttpServletRequest() {
+        return requestSupplier == null ? null : requestSupplier.get();
     }
 
     /** {@inheritDoc} */
-    @Nullable public HttpServletResponse getHttpServletResponse() {
-        return response;
+    @Override @Nullable public HttpServletResponse getHttpServletResponse() {
+        return responseSupplier == null ? null : responseSupplier.get();
     }
 
     /** {@inheritDoc} */
-    public void setHttpServletRequest(@Nullable final HttpServletRequest servletRequest) {
-        request = servletRequest;
+    public void setHttpServletRequest(@Nullable final HttpServletRequest request) {
+        DeprecationSupport.warnOnce(ObjectType.METHOD, "setHttpServletRequest", null, "setHttpServletRequestSupplier");
+        requestSupplier = NonnullSupplier.of(request);
     }
 
     /** {@inheritDoc} */
-    public void setHttpServletResponse(@Nullable final HttpServletResponse servletResponse) {
-        response = servletResponse;
+    @Override public void setHttpServletRequestSupplier(@Nullable final Supplier<HttpServletRequest> servletRequestSupplier) {
+        requestSupplier = servletRequestSupplier;
     }
 
-}
\ No newline at end of file
+    /** {@inheritDoc} */
+    @Override public void setHttpServletResponseSupplier(@Nullable final Supplier<HttpServletResponse> servletResponseSupplier) {
+        responseSupplier = servletResponseSupplier;
+    }
+
+    /** {@inheritDoc} */
+    public void setHttpServletResponse(@Nullable final HttpServletResponse response) {
+        DeprecationSupport.warnOnce(ObjectType.METHOD, "setHttpServletResponse", null, "setHttpServletResponseSupplier");
+        responseSupplier = NonnullSupplier.of(response);
+    }
+}
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java
index 194ed3baf..5c77c8d05 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.messaging.error.servlet;
 
+import java.util.function.Supplier;
+
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -41,8 +43,18 @@ public interface HttpServletMessageErrorHandler extends MessageErrorHandler {
      * 
      * @param request the HTTP servlet request
      */
+    @Deprecated(forRemoval = true, since="4.3")
     void setHttpServletRequest(@Nullable final HttpServletRequest request);
-    
+
+    /**
+     * Set the supplier for the HTTP servlet request on which to operate.
+     *
+     * @param requestSupplier the HTTP servlet request
+     */
+    default void setHttpServletRequestSupplier(@Nullable final Supplier<HttpServletRequest> requestSupplier) {
+        setHttpServletRequest(requestSupplier.get());
+    }
+
     /**
      * Get the HTTP servlet response.
      * 
@@ -55,6 +67,16 @@ public interface HttpServletMessageErrorHandler extends MessageErrorHandler {
      * 
      * @param response the HTTP servlet response
      */
+    @Deprecated(forRemoval = true, since="4.3")
     void setHttpServletResponse(@Nullable final HttpServletResponse response);
 
+    /**
+     * Set the supplier for the HTTP servlet response on which to operate.
+     *
+     * @param requestSupplier the HTTP servlet response
+     */
+    default void setHttpServletResponseSupplier(@Nullable final Supplier<HttpServletResponse> responseSupplier) {
+        setHttpServletResponse(responseSupplier.get());
+    }
+
 }
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/HTTPRequestValidationHandler.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/HTTPRequestValidationHandler.java
index 961a65843..e3d302037 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/HTTPRequestValidationHandler.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/HTTPRequestValidationHandler.java
@@ -17,6 +17,8 @@
 
 package org.opensaml.messaging.handler.impl;
 
+import java.util.function.Supplier;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
@@ -25,7 +27,10 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterI
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
+import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
@@ -51,11 +56,11 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
     private boolean requireSecured;
     
     /** The HTTP servlet request being evaluated. */
-    @NonnullAfterInit private HttpServletRequest httpServletRequest;
+    @NonnullAfterInit private Supplier<HttpServletRequest> httpServletRequestSupplier;
 
     /**
      * Get the required content type.
-     * 
+     *
      * @return the required content type
      */
     public String getRequiredContentType() {
@@ -64,7 +69,7 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Set the required content type.
-     * 
+     *
      * @param contentType the content type
      */
     public void setRequiredContentType(final String contentType) {
@@ -74,7 +79,7 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Get the required request method.
-     * 
+     *
      * @return the required request method
      */
     public String getRequiredRequestMethod() {
@@ -83,7 +88,7 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Set the required request method.
-     * 
+     *
      * @param requestMethod the required request method
      */
     public void setRequiredRequestMethod(final String requestMethod) {
@@ -93,7 +98,7 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Get whether request is required to be secure.
-     * 
+     *
      * @return true if required to be secure, false otherwise
      */
     public boolean isRequireSecured() {
@@ -102,7 +107,7 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Set whether request is required to be secure. 
-     * 
+     *
      * @param secured true if required to be secure, false otherwise
      */
     public void setRequireSecured(final boolean secured) {
@@ -112,21 +117,32 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Get the HTTP servlet request instance being evaluated.
-     * 
+     *
      * @return returns the request instance
      */
-    public HttpServletRequest getHttpServletRequest() {
-        return httpServletRequest;
+    @NonnullAfterInit public HttpServletRequest getHttpServletRequest() {
+        return httpServletRequestSupplier == null ? null : httpServletRequestSupplier.get();
     }
 
     /**
      * Set the HTTP servlet request instance being evaluated.
-     * 
+     *
      * @param request the request instance
      */
     public void setHttpServletRequest(final HttpServletRequest request) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        httpServletRequest = Constraint.isNotNull(request, "HttpServletRequest may not be null");
+        DeprecationSupport.warnOnce(ObjectType.METHOD, "setHttpServletRequest", null, "setHttpServletRequestSupplier");
+        httpServletRequestSupplier = NonnullSupplier.of(Constraint.isNotNull(request, "HttpServletRequest may not be null"));
+    }
+
+    /**
+     * Set the HTTP servlet request supplier
+     *
+     * @param requestSupplier the request instance
+     */
+    public void setHttpServletRequestSupplier(final Supplier<HttpServletRequest> requestSupplier) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        httpServletRequestSupplier = Constraint.isNotNull(requestSupplier, "HttpServletRequest may not be null");
     }
 
     /** {@inheritDoc} */
@@ -138,9 +154,9 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Evaluates whether the specified HTTP servlet request meets all requirements.
-     * 
+     *
      * @param messageContext message context being evaluated
-     * 
+     *
      * @throws MessageHandlerException thrown if the request does not meet the requirements of the handler
      */
     protected void doInvoke(final MessageContext messageContext) throws MessageHandlerException {
@@ -151,9 +167,9 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Checks if the request is of the correct content type.
-     * 
+     *
      * @param request the request being evaluated
-     * 
+     *
      * @throws MessageHandlerException thrown if the content type was an unexpected value
      */
     protected void evaluateContentType(final HttpServletRequest request) throws MessageHandlerException {
@@ -168,9 +184,9 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Checks if the request contains the correct request method.
-     * 
+     *
      * @param request the request being evaluated
-     * 
+     *
      * @throws MessageHandlerException thrown if the request method was an unexpected value
      */
     protected void evaluateRequestMethod(final HttpServletRequest request) throws MessageHandlerException {
@@ -185,9 +201,9 @@ public class HTTPRequestValidationHandler extends AbstractMessageHandler {
 
     /**
      * Checks if the request is secured.
-     * 
+     *
      * @param request the request being evaluated
-     * 
+     *
      * @throws MessageHandlerException thrown if the request is not secure and was required to be
      */
     protected void evaluateSecured(final HttpServletRequest request) throws MessageHandlerException {
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
index 8490dad99..1f9403468 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/logic/IPRangePredicate.java
@@ -20,6 +20,7 @@ package org.opensaml.profile.logic;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Supplier;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -34,6 +35,9 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.Predicate;
 import net.shibboleth.utilities.java.support.net.HttpServletSupport;
 import net.shibboleth.utilities.java.support.net.IPRange;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
+import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
 
 /**
  * A {@link Predicate} that checks if a request is from a set of one or more {@link IPRange}s.
@@ -41,7 +45,7 @@ import net.shibboleth.utilities.java.support.net.IPRange;
 public class IPRangePredicate implements Predicate<BaseContext> {
 
     /** Servlet request to evaluate. */
-    @Nullable private HttpServletRequest httpRequest;
+    @Nullable private Supplier<HttpServletRequest> httpRequestSupplier;
     
     /** IP ranges to match against. */
     @Nonnull @NonnullElements private Collection<IPRange> addressRanges;
@@ -53,9 +57,9 @@ public class IPRangePredicate implements Predicate<BaseContext> {
     
     /**
      * Set the address ranges to check against.
-     * 
+     *
      * @param ranges    address ranges to check against
-     * 
+     *
      * @since 3.3.0
      */
     public void setRanges(@Nonnull @NonnullElements final Collection<IPRange> ranges) {
@@ -63,19 +67,32 @@ public class IPRangePredicate implements Predicate<BaseContext> {
         
         addressRanges = List.copyOf(ranges);
     }
+
+    /**
+     * Set the Supplier for the servlet request to evaluate.
+     *
+     * @param request servlet request supplier to use
+     */
+    public void setHttpServletRequestSupplier(@Nonnull final Supplier<HttpServletRequest> supplier) {
+        httpRequestSupplier = Constraint.isNotNull(supplier, "HttpServletRequestSupplier cannot be null");
+    }
     
     /**
      * Set the servlet request to evaluate.
-     * 
+     *
      * @param request servlet request to evaluate
      */
+    @Deprecated(since = "4.3", forRemoval = true)
     public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        httpRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
+        DeprecationSupport.warnOnce(ObjectType.METHOD, "setHttpServletRequest", null, "setHttpServletRequestSupplier");
+        Constraint.isNotNull(request, "HttpServletRequest cannot be null");
+        httpRequestSupplier = NonnullSupplier.of(request);
     }
 
     /** {@inheritDoc} */
     public boolean test(@Nullable final BaseContext input) {
-        final String address = httpRequest != null ? HttpServletSupport.getRemoteAddr(httpRequest) : null;
+        final HttpServletRequest request = httpRequestSupplier != null ? httpRequestSupplier.get() : null;
+        final String address = request != null ? HttpServletSupport.getRemoteAddr(request) : null;
         if (address == null || !InetAddresses.isInetAddress(address)) {
             return false;
         }

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


More information about the commits mailing list