Skip to content

Commit 1637b5c

Browse files
committed
Merge branch '6.1.x'
Closes gh-13483
2 parents 623a299 + c58e0dd commit 1637b5c

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
@@ -37,6 +37,7 @@
3737
import org.springframework.security.web.util.UrlUtils;
3838
import org.springframework.util.Assert;
3939
import org.springframework.util.ObjectUtils;
40+
import org.springframework.web.util.UriComponentsBuilder;
4041

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

380379
/**

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)