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 <lukaszlen...@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());