Skip to content

Commit 40d6174

Browse files
committed
Replace Existing Continue Parameter
Closes gh-13438
1 parent 8895a66 commit 40d6174

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

web/src/main/java/org/springframework/security/web/savedrequest/DefaultSavedRequest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.springframework.security.web.util.UrlUtils;
3939
import org.springframework.util.Assert;
4040
import org.springframework.util.ObjectUtils;
41+
import org.springframework.web.util.UriComponentsBuilder;
4142

4243
/**
4344
* Represents central information from a {@code HttpServletRequest}.
@@ -372,10 +373,8 @@ private static String createQueryString(String queryString, String matchingReque
372373
if (queryString == null || queryString.length() == 0) {
373374
return matchingRequestParameterName;
374375
}
375-
if (queryString.endsWith("&")) {
376-
return queryString + matchingRequestParameterName;
377-
}
378-
return queryString + "&" + matchingRequestParameterName;
376+
return UriComponentsBuilder.newInstance().query(queryString).replaceQueryParam(matchingRequestParameterName)
377+
.queryParam(matchingRequestParameterName).build().getQuery();
379378
}
380379

381380
/**

web/src/test/java/org/springframework/security/web/savedrequest/DefaultSavedRequestTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,14 @@ public void getRedirectUrlWhenQueryDoesNotEndAmpersandAndMatchingRequestParamete
122122
assertThat(new URL(savedRequest.getRedirectUrl())).hasQuery("foo=bar&success");
123123
}
124124

125+
// gh-13438
126+
@Test
127+
public void getRedirectUrlWhenQueryAlreadyHasSuccessThenDoesNotAdd() throws Exception {
128+
MockHttpServletRequest request = new MockHttpServletRequest();
129+
request.setQueryString("foo=bar&success");
130+
DefaultSavedRequest savedRequest = new DefaultSavedRequest(request, new MockPortResolver(8080, 8443),
131+
"success");
132+
assertThat(savedRequest.getRedirectUrl()).contains("foo=bar&success");
133+
}
134+
125135
}

0 commit comments

Comments
 (0)