From 8f23155bf366daba22e3dcb2ac466e27a581659d Mon Sep 17 00:00:00 2001
From: Stefan Berger
Date: Wed, 4 Jan 2023 15:00:53 +0100
Subject: [PATCH 1/2] Add queryParams method to ProxyExchange
Fixes #2129
---
.../cloud/gateway/mvc/ProxyExchange.java | 22 +++++++++++++++++--
.../cloud/gateway/webflux/ProxyExchange.java | 19 ++++++++++++++++
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java
index e1bb63f86a..99af3f45f7 100644
--- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java
+++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java
@@ -55,6 +55,7 @@
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.util.ClassUtils;
+import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
@@ -133,6 +134,7 @@
*
*
* @author Dave Syer
+ * @author Stefan Berger
*
*/
public class ProxyExchange {
@@ -251,11 +253,23 @@ public ProxyExchange uri(String uri) {
}
}
+ /**
+ * Returns the request path without any query parameters.
+ * @return the URI path
+ * @see ProxyExchange#path(String)
+ * @see ProxyExchange#queryParams
+ */
public String path() {
- return (String) this.webRequest.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE,
- WebRequest.SCOPE_REQUEST);
+ return exchange.getRequest().getPath().pathWithinApplication().value();
}
+ /**
+ * Returns the request path without the provided path prefix and without any query parameters.
+ * @param prefix the path prefix to remove
+ * @return the URI path
+ * @see ProxyExchange#path(String)
+ * @see ProxyExchange#queryParams
+ */
public String path(String prefix) {
String path = path();
if (!path.startsWith(prefix)) {
@@ -264,6 +278,10 @@ public String path(String prefix) {
return path.substring(prefix.length());
}
+ public MultiValueMap queryParams() {
+ return exchange.getRequest().getQueryParams();
+ }
+
public void forward(String path) {
HttpServletRequest request = this.webRequest.getNativeRequest(HttpServletRequest.class);
HttpServletResponse response = this.webRequest.getNativeResponse(HttpServletResponse.class);
diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java
index 62cb7f0721..e522247a71 100644
--- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java
+++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java
@@ -38,6 +38,7 @@
import org.springframework.http.RequestEntity.BodyBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody;
@@ -107,6 +108,7 @@
*
*
* @author Dave Syer
+ * @author Stefan Berger
*
*/
public class ProxyExchange {
@@ -229,10 +231,23 @@ public ProxyExchange uri(String uri) {
return this;
}
+ /**
+ * Returns the request path without any query parameters.
+ * @return the URI path
+ * @see ProxyExchange#path(String)
+ * @see ProxyExchange#queryParams
+ */
public String path() {
return exchange.getRequest().getPath().pathWithinApplication().value();
}
+ /**
+ * Returns the request path without the provided path prefix and without any query parameters.
+ * @param prefix the path prefix to remove
+ * @return the URI path
+ * @see ProxyExchange#path(String)
+ * @see ProxyExchange#queryParams
+ */
public String path(String prefix) {
String path = path();
if (!path.startsWith(prefix)) {
@@ -241,6 +256,10 @@ public String path(String prefix) {
return path.substring(prefix.length());
}
+ public MultiValueMap queryParams() {
+ return exchange.getRequest().getQueryParams();
+ }
+
public Mono> get() {
RequestEntity> requestEntity = headers((BodyBuilder) RequestEntity.get(uri)).build();
return exchange(requestEntity);
From f31ca723c43deea5a472fc10683996fdeca0ff26 Mon Sep 17 00:00:00 2001
From: Stefan Berger
Date: Wed, 4 Jan 2023 15:02:57 +0100
Subject: [PATCH 2/2] Add Javadoc for queryParams()
---
.../org/springframework/cloud/gateway/mvc/ProxyExchange.java | 4 ++++
.../springframework/cloud/gateway/webflux/ProxyExchange.java | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java
index 99af3f45f7..b52e970988 100644
--- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java
+++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java
@@ -278,6 +278,10 @@ public String path(String prefix) {
return path.substring(prefix.length());
}
+ /**
+ * Returns the original query parameters.
+ * @return the query parameters
+ */
public MultiValueMap queryParams() {
return exchange.getRequest().getQueryParams();
}
diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java
index e522247a71..113abbc5b0 100644
--- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java
+++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java
@@ -256,6 +256,10 @@ public String path(String prefix) {
return path.substring(prefix.length());
}
+ /**
+ * Returns the original query parameters.
+ * @return the query parameters
+ */
public MultiValueMap queryParams() {
return exchange.getRequest().getQueryParams();
}