Servlet 3 multipart request implements getParameterMap defensively as well
Issue: SPR-11074
This commit is contained in:
parent
6fef8b996c
commit
c7d1c49d6d
|
@ -18,7 +18,7 @@ package org.springframework.web.multipart.support;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
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
|
||||
public String getParameter(String name) {
|
||||
String[] values = getMultipartParameters().get(name);
|
||||
|
@ -109,11 +93,32 @@ public class DefaultMultipartHttpServletRequest extends AbstractMultipartHttpSer
|
|||
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
|
||||
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(getMultipartParameters());
|
||||
paramMap.putAll(multipartParameters);
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,9 @@ import java.util.ArrayList;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.Part;
|
||||
|
@ -138,6 +140,8 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe
|
|||
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>();
|
||||
Enumeration<String> paramEnum = super.getParameterNames();
|
||||
while (paramEnum.hasMoreElements()) {
|
||||
|
@ -147,6 +151,27 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe
|
|||
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
|
||||
public String getMultipartContentType(String paramOrFileName) {
|
||||
try {
|
||||
|
|
Loading…
Reference in New Issue