Skip to content

Commit 8aabc43

Browse files
committed
Servlet 3 multipart request implements getParameterMap defensively as well
Issue: SPR-11074 (cherry picked from commit c7d1c49)
1 parent 4d3aa59 commit 8aabc43

File tree

2 files changed

+49
-19
lines changed

2 files changed

+49
-19
lines changed

spring-web/src/main/java/org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.java

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import java.util.Collections;
2020
import java.util.Enumeration;
21-
import java.util.HashMap;
21+
import java.util.LinkedHashMap;
2222
import java.util.LinkedHashSet;
2323
import java.util.Map;
2424
import java.util.Set;
@@ -75,22 +75,6 @@ public DefaultMultipartHttpServletRequest(HttpServletRequest request) {
7575
}
7676

7777

78-
@Override
79-
public Enumeration<String> getParameterNames() {
80-
Map<String, String[]> multipartParameters = getMultipartParameters();
81-
if (multipartParameters.isEmpty()) {
82-
return super.getParameterNames();
83-
}
84-
85-
Set<String> paramNames = new LinkedHashSet<String>();
86-
Enumeration<String> paramEnum = super.getParameterNames();
87-
while (paramEnum.hasMoreElements()) {
88-
paramNames.add(paramEnum.nextElement());
89-
}
90-
paramNames.addAll(multipartParameters.keySet());
91-
return Collections.enumeration(paramNames);
92-
}
93-
9478
@Override
9579
public String getParameter(String name) {
9680
String[] values = getMultipartParameters().get(name);
@@ -109,11 +93,32 @@ public String[] getParameterValues(String name) {
10993
return super.getParameterValues(name);
11094
}
11195

96+
@Override
97+
public Enumeration<String> getParameterNames() {
98+
Map<String, String[]> multipartParameters = getMultipartParameters();
99+
if (multipartParameters.isEmpty()) {
100+
return super.getParameterNames();
101+
}
102+
103+
Set<String> paramNames = new LinkedHashSet<String>();
104+
Enumeration<String> paramEnum = super.getParameterNames();
105+
while (paramEnum.hasMoreElements()) {
106+
paramNames.add(paramEnum.nextElement());
107+
}
108+
paramNames.addAll(multipartParameters.keySet());
109+
return Collections.enumeration(paramNames);
110+
}
111+
112112
@Override
113113
public Map<String, String[]> getParameterMap() {
114-
Map<String, String[]> paramMap = new HashMap<String, String[]>();
114+
Map<String, String[]> multipartParameters = getMultipartParameters();
115+
if (multipartParameters.isEmpty()) {
116+
return super.getParameterMap();
117+
}
118+
119+
Map<String, String[]> paramMap = new LinkedHashMap<String, String[]>();
115120
paramMap.putAll(super.getParameterMap());
116-
paramMap.putAll(getMultipartParameters());
121+
paramMap.putAll(multipartParameters);
117122
return paramMap;
118123
}
119124

spring-web/src/main/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
import java.util.Collection;
2424
import java.util.Collections;
2525
import java.util.Enumeration;
26+
import java.util.LinkedHashMap;
2627
import java.util.LinkedHashSet;
28+
import java.util.Map;
2729
import java.util.Set;
2830
import javax.servlet.http.HttpServletRequest;
2931
import javax.servlet.http.Part;
@@ -138,6 +140,8 @@ public Enumeration<String> getParameterNames() {
138140
return super.getParameterNames();
139141
}
140142

143+
// Servlet 3.0 getParameterNames() not guaranteed to include multipart form items
144+
// (e.g. on WebLogic 12) -> need to merge them here to be on the safe side
141145
Set<String> paramNames = new LinkedHashSet<String>();
142146
Enumeration<String> paramEnum = super.getParameterNames();
143147
while (paramEnum.hasMoreElements()) {
@@ -147,6 +151,27 @@ public Enumeration<String> getParameterNames() {
147151
return Collections.enumeration(paramNames);
148152
}
149153

154+
@Override
155+
public Map<String, String[]> getParameterMap() {
156+
if (this.multipartParameterNames == null) {
157+
initializeMultipart();
158+
}
159+
if (this.multipartParameterNames.isEmpty()) {
160+
return super.getParameterMap();
161+
}
162+
163+
// Servlet 3.0 getParameterMap() not guaranteed to include multipart form items
164+
// (e.g. on WebLogic 12) -> need to merge them here to be on the safe side
165+
Map<String, String[]> paramMap = new LinkedHashMap<String, String[]>();
166+
paramMap.putAll(super.getParameterMap());
167+
for (String paramName : this.multipartParameterNames) {
168+
if (!paramMap.containsKey(paramName)) {
169+
paramMap.put(paramName, getParameterValues(paramName));
170+
}
171+
}
172+
return paramMap;
173+
}
174+
150175
@Override
151176
public String getMultipartContentType(String paramOrFileName) {
152177
try {

0 commit comments

Comments
 (0)