[java-opensaml] 08/10: IDP-1793 Use Suppliers for HttpRequest/Response
Rod Widdowson
rdw at steadingsoftware.com
Tue Aug 2 19:34:46 UTC 2022
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch dev/4/IDP-1793
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=dd666c2aff208feca870f373d4d5d12f7769c46f
commit dd666c2aff208feca870f373d4d5d12f7769c46f
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Jul 31 14:20:38 2022 +0100
IDP-1793 Use Suppliers for HttpRequest/Response
https://shibboleth.atlassian.net/browse/IDP-1793
org.opensaml.messaging.decoder.servlet.AbstractHttpServletRequestMessageDecoder
(an API base class)
gains a setter for a Supplier for the HttpServletRequest.
Change tests to use this.
---
.../AbstractHttpServletRequestMessageDecoder.java | 62 +++++++++++++++++-----
.../binding/decoding/impl/HTTPPostDecoderTest.java | 5 +-
.../decoding/impl/HTTPSOAP11DecoderTest.java | 6 ++-
.../binding/decoding/impl/HTTPPostDecoderTest.java | 6 ++-
.../impl/HTTPRedirectDeflateDecoderTest.java | 5 +-
.../decoding/impl/HTTPSOAP11DecoderTest.java | 6 ++-
.../decoder/http/impl/HTTPSOAP11DecoderTest.java | 6 ++-
7 files changed, 75 insertions(+), 21 deletions(-)
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java
index 320b41f71..a0f2e8049 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java
@@ -17,14 +17,21 @@
package org.opensaml.messaging.decoder.servlet;
+import java.util.function.Supplier;
+
import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestProxy;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
import org.opensaml.messaging.decoder.AbstractMessageDecoder;
import org.opensaml.messaging.decoder.MessageDecodingException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Abstract implementation of {@link HttpServletRequestMessageDecoder}.
@@ -32,39 +39,66 @@ import org.opensaml.messaging.decoder.MessageDecodingException;
public abstract class AbstractHttpServletRequestMessageDecoder extends AbstractMessageDecoder
implements HttpServletRequestMessageDecoder {
- /** The HTTP servlet request. */
- @Nullable private HttpServletRequest request;
+ /** Logger. */
+ private final Logger log = LoggerFactory.getLogger(AbstractHttpServletRequestMessageDecoder.class);
+
+ /** Current HTTP request, if available. */
+ @Nullable private Supplier<HttpServletRequest> httpServletRequestSupplier;
/** {@inheritDoc} */
+ @Override
@Nullable public HttpServletRequest getHttpServletRequest() {
- return request;
+ if (httpServletRequestSupplier == null) {
+ return null;
+ }
+ return httpServletRequestSupplier.get();
+ }
+
+ /**
+ * Get the supplier for HTTP request if available.
+ *
+ * @return current HTTP request
+ */
+ @Nullable public Supplier<HttpServletRequest> getHttpServletRequestSupplier() {
+ return httpServletRequestSupplier;
}
/** {@inheritDoc} */
- public synchronized void setHttpServletRequest(@Nullable final HttpServletRequest servletRequest) {
+ @Override
+ @Deprecated(since = "4.3", forRemoval = true)
+ public void setHttpServletRequest(@Nullable final HttpServletRequest request) {
ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
- ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+ DeprecationSupport.warnOnce(ObjectType.METHOD, "setHttpServletReqest",
+ getClass().getCanonicalName(), "setHttpServletRequestSupplier");
+ if (request != null && !(request instanceof ThreadLocalHttpServletRequestProxy)) {
+ log.warn("Unsafe HttpServletRequest injected");
+ }
+ httpServletRequestSupplier = new Supplier<>() {
+ public HttpServletRequest get() {
+ return request;
+ };
+ };
+ }
- request = servletRequest;
+ /** {@inheritDoc} */
+ @Override
+ public void setHttpServletRequestSupplier(@Nullable final Supplier<HttpServletRequest> requestSupplier) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+ httpServletRequestSupplier = requestSupplier;
}
-
+
/** {@inheritDoc} */
public void decode() throws MessageDecodingException {
super.decode();
}
- /** {@inheritDoc} */
- protected void doDestroy() {
- request = null;
-
- super.doDestroy();
- }
/** {@inheritDoc} */
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- if (request == null) {
+ if (getHttpServletRequest() == null) {
throw new ComponentInitializationException("HTTP Servlet request cannot be null");
}
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java
index e7bb1d473..e496e8642 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java
@@ -19,6 +19,9 @@ package org.opensaml.saml.saml1.binding.decoding.impl;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.function.Supplier;
+
+import javax.servlet.http.HttpServletRequest;
import net.shibboleth.utilities.java.support.codec.Base64Support;
import net.shibboleth.utilities.java.support.codec.DecodingException;
@@ -57,7 +60,7 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
decoder = new HTTPPostDecoder();
decoder.setParserPool(parserPool);
- decoder.setHttpServletRequest(httpRequest);
+ decoder.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() { return httpRequest;}});
decoder.initialize();
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java
index 475cfbd24..42abdda64 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java
@@ -19,6 +19,10 @@ package org.opensaml.saml.saml1.binding.decoding.impl;
import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+import java.util.function.Supplier;
+
+import javax.servlet.http.HttpServletRequest;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.io.MarshallingException;
@@ -47,7 +51,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
decoder = new HTTPSOAP11Decoder();
decoder.setParserPool(parserPool);
- decoder.setHttpServletRequest(httpRequest);
+ decoder.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() { return httpRequest;}});
decoder.initialize();
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java
index d1f282938..13c658aad 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java
@@ -17,6 +17,10 @@
package org.opensaml.saml.saml2.binding.decoding.impl;
+import java.util.function.Supplier;
+
+import javax.servlet.http.HttpServletRequest;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.decoder.MessageDecodingException;
@@ -52,7 +56,7 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
decoder = new HTTPPostDecoder();
decoder.setParserPool(parserPool);
- decoder.setHttpServletRequest(httpRequest);
+ decoder.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() { return httpRequest;}});
decoder.initialize();
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java
index 37151b549..0458347d6 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java
@@ -21,9 +21,12 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.function.Supplier;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
+import javax.servlet.http.HttpServletRequest;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.io.MarshallingException;
import org.opensaml.messaging.context.MessageContext;
@@ -65,7 +68,7 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
decoder = new HTTPRedirectDeflateDecoder();
decoder.setParserPool(parserPool);
- decoder.setHttpServletRequest(httpRequest);
+ decoder.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() { return httpRequest;}});
decoder.initialize();
}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java
index c0ea656a1..c522b2c6f 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java
@@ -19,6 +19,10 @@ package org.opensaml.saml.saml2.binding.decoding.impl;
import net.shibboleth.utilities.java.support.xml.SerializeSupport;
+import java.util.function.Supplier;
+
+import javax.servlet.http.HttpServletRequest;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.io.MarshallingException;
@@ -47,7 +51,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
decoder = new HTTPSOAP11Decoder();
decoder.setParserPool(parserPool);
- decoder.setHttpServletRequest(httpRequest);
+ decoder.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() { return httpRequest;}});
decoder.initialize();
}
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java
index 8f627cfdd..8f6509821 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java
@@ -18,6 +18,9 @@
package org.opensaml.soap.soap11.decoder.http.impl;
import java.io.IOException;
+import java.util.function.Supplier;
+
+import javax.servlet.http.HttpServletRequest;
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.schema.XSAny;
@@ -25,7 +28,6 @@ import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.decoder.MessageDecodingException;
import org.opensaml.messaging.handler.AbstractMessageHandler;
import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.security.SecurityException;
import org.opensaml.soap.messaging.context.SOAP11Context;
import org.opensaml.soap.soap11.Envelope;
import org.springframework.mock.web.MockHttpServletRequest;
@@ -54,7 +56,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
decoder = new HTTPSOAP11Decoder();
decoder.setParserPool(parserPool);
- decoder.setHttpServletRequest(httpRequest);
+ decoder.setHttpServletRequestSupplier(new Supplier<>() {public HttpServletRequest get() { return httpRequest;}});
// Let actual test method do the initialize(), so can set own body handler.
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list