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

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


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

rdw pushed a commit to branch main
in repository java-opensaml.

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

commit acff2ed90fb1c11ceca0ac6dabf66e813c6008be
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Jan 7 14:03:18 2023 +0000

    IDP-1793 Use Suppliers for HttpRequest/Response
    
    https://shibboleth.atlassian.net/browse/IDP-1793
    
    Missed class: IPRangePredicate
---
 .../opensaml/profile/logic/IPRangePredicate.java   | 28 ++++++++++++----------
 .../profile/logic/IPRangePredicateTest.java        |  9 +++++--
 2 files changed, 23 insertions(+), 14 deletions(-)

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 20c54708e..de6a08146 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,8 @@ package org.opensaml.profile.logic;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -32,17 +34,18 @@ import jakarta.servlet.http.HttpServletRequest;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.net.IPRange;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 import net.shibboleth.shared.servlet.HttpServletSupport;
 
-import java.util.function.Predicate;
-
 /**
  * A {@link Predicate} that checks if a request is from a set of one or more {@link IPRange}s.
  */
 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;
@@ -54,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) {
@@ -64,19 +67,20 @@ public class IPRangePredicate implements Predicate<BaseContext> {
         
         addressRanges = List.copyOf(ranges);
     }
-    
+
     /**
-     * Set the servlet request to evaluate.
-     * 
-     * @param request servlet request to evaluate
+     * Set the Supplier for the servlet request to evaluate.
+     *
+     * @param request servlet request supplier to use
      */
-    public void setHttpServletRequest(@Nonnull final HttpServletRequest request) {
-        httpRequest = Constraint.isNotNull(request, "HttpServletRequest cannot be null");
+    public void setHttpServletRequestSupplier(@Nonnull final Supplier<HttpServletRequest> supplier) {
+        httpRequestSupplier = Constraint.isNotNull(supplier, "HttpServletRequestSupplier cannot be null");
     }
 
     /** {@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;
         }
diff --git a/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/IPRangePredicateTest.java b/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/IPRangePredicateTest.java
index 5feba47ed..d17dc6e9d 100644
--- a/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/IPRangePredicateTest.java
+++ b/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/IPRangePredicateTest.java
@@ -18,7 +18,9 @@
 package org.opensaml.profile.logic;
 
 import java.util.Map;
+import java.util.function.Supplier;
 
+import net.shibboleth.shared.primitive.NonnullSupplier;
 import net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor;
 import net.shibboleth.shared.spring.util.ApplicationContextBuilder;
 
@@ -28,6 +30,8 @@ import org.springframework.mock.web.MockHttpServletRequest;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import jakarta.servlet.http.HttpServletRequest;
+
 /**
  * Unit test of {@link IPRangePredicate}.
  */
@@ -45,9 +49,10 @@ public class IPRangePredicateTest {
         Assert.assertEquals(map.size(), 2);
 
         final MockHttpServletRequest request = new MockHttpServletRequest();
+        final Supplier<HttpServletRequest> supplier = NonnullSupplier.of(request);
    
         IPRangePredicate condition = map.get("three");
-        condition.setHttpServletRequest(request);
+        condition.setHttpServletRequestSupplier(supplier);
    
         request.setRemoteAddr("192.168.1.128");
         Assert.assertTrue(condition.test(null));
@@ -59,7 +64,7 @@ public class IPRangePredicateTest {
         Assert.assertFalse(condition.test(null));
 
         condition = map.get("four");
-        condition.setHttpServletRequest(request);
+        condition.setHttpServletRequestSupplier(supplier);
 
         request.setRemoteAddr("2620:df:8000:ff14:0:0:0:2");
         Assert.assertTrue(condition.test(null));

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


More information about the commits mailing list