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:46 UTC

[struts] branch WW-5310-fragment created (now 97137bd0f)

This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch WW-5310-fragment
in repository https://gitbox.apache.org/repos/asf/struts.git


      at 97137bd0f WW-5310 Supports fragment in URL

This branch includes the following new commits:

     new 97137bd0f WW-5310 Supports fragment in URL

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[struts] 01/01: WW-5310 Supports fragment in URL

Posted by lu...@apache.org.
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());