Describe the bug
Gateway-Mvc FormFilter erase all parameters causing retrive parameter return null in later filter or servlet
Sample
i have a servlet for a form to post submit , but i can not retrive parameter by using request.getParameter("fool"),after i debug, i found formfilter will remove all parameters , and only offer query params to next filter or servlet
why ? , that will cause the later filter or servlet can not access any parameters.
static HttpServletRequest getRequestWithBodyFromRequestParameters(HttpServletRequest request) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
Writer writer = new OutputStreamWriter(bos, FORM_CHARSET);
Map<String, String[]> form = request.getParameterMap();
String queryString = request.getQueryString();
StringBuffer requestURL = request.getRequestURL();
if (StringUtils.hasText(queryString)) {
requestURL.append('?').append(queryString);
}
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(requestURL.toString());
//only pass queryParams for later parameters
MultiValueMap<String, String> queryParams = uriComponentsBuilder.build().getQueryParams();
for (Iterator<Map.Entry<String, String[]>> entryIterator = form.entrySet().iterator(); entryIterator
.hasNext();) {
Map.Entry<String, String[]> entry = entryIterator.next();
String name = entry.getKey();
List<String> values = Arrays.asList(entry.getValue());
for (Iterator<String> valueIterator = values.iterator(); valueIterator.hasNext();) {
String value = valueIterator.next();
List<String> queryValues = queryParams.get(name);
boolean isQueryParam = queryParams.containsKey(name) && queryValues != null
&& queryValues.contains(value);
if (!isQueryParam) {
writer.write(URLEncoder.encode(name, FORM_CHARSET));
if (value != null) {
writer.write('=');
writer.write(URLEncoder.encode(value, FORM_CHARSET));
if (valueIterator.hasNext()) {
writer.write('&');
}
}
}
}
if (entryIterator.hasNext()) {
writer.append('&');
}
}
writer.flush();
ByteArrayServletInputStream servletInputStream = new ByteArrayServletInputStream(
new ByteArrayInputStream(bos.toByteArray()));
//why only use queryParams
return new FormContentRequestWrapper(request, queryParams) {
Describe the bug
Gateway-Mvc FormFilter erase all parameters causing retrive parameter return null in later filter or servlet
Sample
i have a servlet for a form to post submit , but i can not retrive parameter by using request.getParameter("fool"),after i debug, i found formfilter will remove all parameters , and only offer query params to next filter or servlet
why ? , that will cause the later filter or servlet can not access any parameters.