Servlet 3 multipart request implements getParameterMap defensively as well
Issue: SPR-11074
This commit is contained in:
@@ -18,7 +18,7 @@ package org.springframework.web.multipart.support;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -75,22 +75,6 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Enumeration<String> getParameterNames() {
|
|
||||||
Map<String, String[]> multipartParameters = getMultipartParameters();
|
|
||||||
if (multipartParameters.isEmpty()) {
|
|
||||||
return super.getParameterNames();
|
|
||||||
}
|
|
||||||
|
|
||||||
Set<String> paramNames = new LinkedHashSet<String>();
|
|
||||||
Enumeration<String> paramEnum = super.getParameterNames();
|
|
||||||
while (paramEnum.hasMoreElements()) {
|
|
||||||
paramNames.add(paramEnum.nextElement());
|
|
||||||
}
|
|
||||||
paramNames.addAll(multipartParameters.keySet());
|
|
||||||
return Collections.enumeration(paramNames);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getParameter(String name) {
|
public String getParameter(String name) {
|
||||||
String[] values = getMultipartParameters().get(name);
|
String[] values = getMultipartParameters().get(name);
|
||||||
@@ -109,11 +93,32 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer
|
|||||||
return super.getParameterValues(name);
|
return super.getParameterValues(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Enumeration<String> getParameterNames() {
|
||||||
|
Map<String, String[]> multipartParameters = getMultipartParameters();
|
||||||
|
if (multipartParameters.isEmpty()) {
|
||||||
|
return super.getParameterNames();
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> paramNames = new LinkedHashSet<String>();
|
||||||
|
Enumeration<String> paramEnum = super.getParameterNames();
|
||||||
|
while (paramEnum.hasMoreElements()) {
|
||||||
|
paramNames.add(paramEnum.nextElement());
|
||||||
|
}
|
||||||
|
paramNames.addAll(multipartParameters.keySet());
|
||||||
|
return Collections.enumeration(paramNames);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String[]> getParameterMap() {
|
public Map<String, String[]> getParameterMap() {
|
||||||
Map<String, String[]> paramMap = new HashMap<String, String[]>();
|
Map<String, String[]> multipartParameters = getMultipartParameters();
|
||||||
|
if (multipartParameters.isEmpty()) {
|
||||||
|
return super.getParameterMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, String[]> paramMap = new LinkedHashMap<String, String[]>();
|
||||||
paramMap.putAll(super.getParameterMap());
|
paramMap.putAll(super.getParameterMap());
|
||||||
paramMap.putAll(getMultipartParameters());
|
paramMap.putAll(multipartParameters);
|
||||||
return paramMap;
|
return paramMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.Part;
|
import javax.servlet.http.Part;
|
||||||
@@ -138,6 +140,8 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe
|
|||||||
return super.getParameterNames();
|
return super.getParameterNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Servlet 3.0 getParameterNames() not guaranteed to include multipart form items
|
||||||
|
// (e.g. on WebLogic 12) -> need to merge them here to be on the safe side
|
||||||
Set<String> paramNames = new LinkedHashSet<String>();
|
Set<String> paramNames = new LinkedHashSet<String>();
|
||||||
Enumeration<String> paramEnum = super.getParameterNames();
|
Enumeration<String> paramEnum = super.getParameterNames();
|
||||||
while (paramEnum.hasMoreElements()) {
|
while (paramEnum.hasMoreElements()) {
|
||||||
@@ -147,6 +151,27 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe
|
|||||||
return Collections.enumeration(paramNames);
|
return Collections.enumeration(paramNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String[]> getParameterMap() {
|
||||||
|
if (this.multipartParameterNames == null) {
|
||||||
|
initializeMultipart();
|
||||||
|
}
|
||||||
|
if (this.multipartParameterNames.isEmpty()) {
|
||||||
|
return super.getParameterMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Servlet 3.0 getParameterMap() not guaranteed to include multipart form items
|
||||||
|
// (e.g. on WebLogic 12) -> need to merge them here to be on the safe side
|
||||||
|
Map<String, String[]> paramMap = new LinkedHashMap<String, String[]>();
|
||||||
|
paramMap.putAll(super.getParameterMap());
|
||||||
|
for (String paramName : this.multipartParameterNames) {
|
||||||
|
if (!paramMap.containsKey(paramName)) {
|
||||||
|
paramMap.put(paramName, getParameterValues(paramName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMultipartContentType(String paramOrFileName) {
|
public String getMultipartContentType(String paramOrFileName) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user