[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