From 3f5e0b57cd73d94c13ba591e230720d3e175537f Mon Sep 17 00:00:00 2001 From: Elia Mezzano Date: Wed, 2 Sep 2026 18:20:40 +0200 Subject: [PATCH] Multiple request parameters: - managed in PageURL - exposed in freemarker - fixed bug in XSSRequestWrapper - enhanced URLTag with excludeParameters parametrized --- .../services/url/AbstractURLManager.java | 9 ++- .../aps/system/services/url/PageURL.java | 8 ++- engine/src/main/tld/aps-core.tld | 2 +- .../aps/servlet/ControllerServlet.java | 1 + .../RequestParameterValuesHashModel.java | 72 +++++++++++++++++++ .../aps/servlet/XSSRequestWrapper.java | 6 +- 6 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 portal-ui/src/main/java/org/entando/entando/aps/servlet/RequestParameterValuesHashModel.java diff --git a/engine/src/main/java/com/agiletec/aps/system/services/url/AbstractURLManager.java b/engine/src/main/java/com/agiletec/aps/system/services/url/AbstractURLManager.java index 05169d45a2..a4590a8021 100644 --- a/engine/src/main/java/com/agiletec/aps/system/services/url/AbstractURLManager.java +++ b/engine/src/main/java/com/agiletec/aps/system/services/url/AbstractURLManager.java @@ -71,7 +71,14 @@ protected String createQueryString(Map params, boolean escapeAmp String paramSeparator = escapeAmp ? "&" : "&"; while (keyIter.hasNext()) { String name = keyIter.next(); - buf.append(this.encodeParam(name)).append("=").append(this.encodeParam(params.get(name))); + String encodeName = this.encodeParam(name); + String[] paramValues = params.get(name).split(PageURL.PARAMETERS_SEAPARATOR); + for (int i = 0; i < paramValues.length; i++ ) { + buf.append(encodeName).append("=").append(this.encodeParam(paramValues[i])); + if (i < paramValues.length -1) { + buf.append(paramSeparator); + } + } if (index != params.size()) { buf.append(paramSeparator); index++; diff --git a/engine/src/main/java/com/agiletec/aps/system/services/url/PageURL.java b/engine/src/main/java/com/agiletec/aps/system/services/url/PageURL.java index ef8ed4b9d9..6adbcaec77 100644 --- a/engine/src/main/java/com/agiletec/aps/system/services/url/PageURL.java +++ b/engine/src/main/java/com/agiletec/aps/system/services/url/PageURL.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import jakarta.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.StringUtils; /** * Rappresenta un URL ad una pagina del sistema. Oggetti di questa classe @@ -141,7 +142,9 @@ public void setParamRepeat(List parametersToExclude) { if (null != paramsMap && !paramsMap.isEmpty()) { for(String key : paramsMap.keySet()) { if (null == parametersToExclude || !parametersToExclude.contains(key)) { - this.addParam(key, req.getParameter(key)); + String[] values = req.getParameterValues(key); + String fullString = StringUtils.join(values, PARAMETERS_SEAPARATOR); + this.addParam(key, fullString); } } } @@ -170,5 +173,6 @@ public void setBaseUrlMode(String baseUrlMode) { private Map params; private boolean escapeAmp = true; - + public static final String PARAMETERS_SEAPARATOR = "__ENTANDO_PARAM_SEP__"; + } diff --git a/engine/src/main/tld/aps-core.tld b/engine/src/main/tld/aps-core.tld index edfde32559..9c93da0ac7 100644 --- a/engine/src/main/tld/aps-core.tld +++ b/engine/src/main/tld/aps-core.tld @@ -694,7 +694,7 @@ Used only when paramRepeat="true".]]> excludeParameters no - false + true