You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2023/05/29 13:52:47 UTC
[struts] 01/01: WW-5310 Supports fragment in URL
This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch WW-5310-fragment
in repository https://gitbox.apache.org/repos/asf/struts.git
commit 97137bd0f934522e7ec2fe30511dba19cdbacb8a
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Mon May 29 15:52:38 2023 +0200
WW-5310 Supports fragment in URL
---
.../org/apache/struts2/url/StrutsQueryStringParser.java | 14 +++++++++++++-
.../apache/struts2/url/StrutsQueryStringParserTest.java | 8 ++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java b/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java
index 3b3ec80eb..4c31d4885 100644
--- a/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java
+++ b/core/src/main/java/org/apache/struts2/url/StrutsQueryStringParser.java
@@ -49,7 +49,7 @@ public class StrutsQueryStringParser implements QueryStringParser {
}
Map<String, Object> queryParams = new LinkedHashMap<>();
- String[] params = queryString.split("&");
+ String[] params = extractParams(queryString);
for (String param : params) {
if (StringUtils.isBlank(param)) {
LOG.debug("Param [{}] is blank, skipping", param);
@@ -69,6 +69,18 @@ public class StrutsQueryStringParser implements QueryStringParser {
return queryParams;
}
+ private String[] extractParams(String queryString) {
+ LOG.trace("Extracting params from query string: {}", queryString);
+ String[] params = queryString.split("&");
+
+ int fragmentIndex = queryString.lastIndexOf("#");
+ if (fragmentIndex > -1) {
+ LOG.trace("Stripping fragment at index: {}", fragmentIndex);
+ params = queryString.substring(0, fragmentIndex).split("&");
+ }
+ return params;
+ }
+
private void extractParam(String paramName, String paramValue, Map<String, Object> queryParams, boolean forceValueArray) {
String decodedParamName = decoder.decode(paramName, true);
String decodedParamValue = decoder.decode(paramValue, true);
diff --git a/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java b/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java
index ab0622cd5..93fd9bbaa 100644
--- a/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java
+++ b/core/src/test/java/org/apache/struts2/url/StrutsQueryStringParserTest.java
@@ -103,6 +103,14 @@ public class StrutsQueryStringParserTest {
assertEquals("1234", queryParameters.get("param1"));
}
+ @Test
+ public void shouldHandleParamAndFragment() {
+ Map<String, Object> queryParameters = parser.parse("param1=1234#test", false);
+
+ assertTrue(queryParameters.containsKey("param1"));
+ assertEquals("1234", queryParameters.get("param1"));
+ }
+
@Before
public void setUp() throws Exception {
this.parser = new StrutsQueryStringParser(new StrutsUrlDecoder());