Skip to content

Commit a840fca

Browse files
committed
Fix improper encoding of '+' in query parameter values when rewrite query parameter
Signed-off-by: raccoonback <kosb15@naver.com>
1 parent d12a587 commit a840fca

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ public static Function<ServerRequest, ServerRequest> rewriteRequestParameter(Str
351351
queryParams.add(name, replacement);
352352
}
353353

354-
MultiValueMap<String, String> encodedQueryParams = UriUtils.encodeQueryParams(queryParams);
354+
MultiValueMap<String, String> encodedQueryParams = MvcUtils.encodeQueryParams(queryParams);
355355
URI rewrittenUri = UriComponentsBuilder.fromUri(request.uri())
356356
.replaceQueryParams(unmodifiableMultiValueMap(encodedQueryParams))
357357
.build(true)

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/BeforeFilterFunctionsTests.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,19 +129,36 @@ void rewriteEncodedRequestParameter() {
129129
assertThat(result.uri().toString()).hasToString("http://localhost/path?baz=qux&foo%5B%5D=replacement%5B%5D");
130130
}
131131

132+
@Test
133+
void rewritePlusSignRequestParameter() {
134+
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/path")
135+
.param("foo", "bar")
136+
.param("baz", "qux")
137+
.buildRequest(null);
138+
139+
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
140+
141+
ServerRequest result = BeforeFilterFunctions.rewriteRequestParameter("foo", "replacement+").apply(request);
142+
143+
assertThat(result.param("foo")).isPresent().hasValue("replacement+");
144+
assertThat(result.uri().toString()).hasToString("http://localhost/path?baz=qux&foo=replacement%2B");
145+
}
146+
132147
@Test
133148
void rewriteRequestParameterWithEncodedRemainParameters() {
134149
MockHttpServletRequest servletRequest = MockMvcRequestBuilders.get("http://localhost/path")
135150
.param("foo", "bar")
136151
.param("baz[]", "qux[]")
152+
.param("quux", "corge+")
137153
.buildRequest(null);
138154

139155
ServerRequest request = ServerRequest.create(servletRequest, Collections.emptyList());
140156

141157
ServerRequest result = BeforeFilterFunctions.rewriteRequestParameter("foo", "replacement").apply(request);
142158

143159
assertThat(result.param("foo")).isPresent().hasValue("replacement");
144-
assertThat(result.uri().toString()).hasToString("http://localhost/path?baz%5B%5D=qux%5B%5D&foo=replacement");
160+
assertThat(result.uri().toString())
161+
.hasToString("http://localhost/path?baz%5B%5D=qux%5B%5D&quux=corge%2B&foo=replacement");
145162
}
146163

147164
@Test

0 commit comments

Comments
 (0)