diff --git a/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java b/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java index 57fefe535fd..65d2421a5d8 100644 --- a/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java +++ b/spring-web/src/main/java/org/springframework/web/util/ContentCachingRequestWrapper.java @@ -26,7 +26,6 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.Map; - import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; @@ -39,6 +38,7 @@ import javax.servlet.http.HttpServletRequestWrapper; *

Used e.g. by {@link org.springframework.web.filter.AbstractRequestLoggingFilter}. * * @author Juergen Hoeller + * @author Brian Clozel * @since 4.1.3 */ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { @@ -47,6 +47,7 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { private static final String METHOD_POST = "POST"; + private final ByteArrayOutputStream cachedContent; private ServletInputStream inputStream; @@ -89,42 +90,44 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { @Override public String getParameter(String name) { - if(this.cachedContent.size() == 0 && isFormPost()) { - writeRequestParamsToContent(); + if (this.cachedContent.size() == 0 && isFormPost()) { + writeRequestParametersToCachedContent(); } return super.getParameter(name); } @Override public Map getParameterMap() { - if(this.cachedContent.size() == 0 && isFormPost()) { - writeRequestParamsToContent(); + if (this.cachedContent.size() == 0 && isFormPost()) { + writeRequestParametersToCachedContent(); } return super.getParameterMap(); } @Override public Enumeration getParameterNames() { - if(this.cachedContent.size() == 0 && isFormPost()) { - writeRequestParamsToContent(); + if (this.cachedContent.size() == 0 && isFormPost()) { + writeRequestParametersToCachedContent(); } return super.getParameterNames(); } @Override public String[] getParameterValues(String name) { - if(this.cachedContent.size() == 0 && isFormPost()) { - writeRequestParamsToContent(); + if (this.cachedContent.size() == 0 && isFormPost()) { + writeRequestParametersToCachedContent(); } return super.getParameterValues(name); } + private boolean isFormPost() { - return (getContentType() != null && getContentType().contains(FORM_CONTENT_TYPE) && + String contentType = getContentType(); + return (contentType != null && contentType.contains(FORM_CONTENT_TYPE) && METHOD_POST.equalsIgnoreCase(getMethod())); } - private void writeRequestParamsToContent() { + private void writeRequestParametersToCachedContent() { try { if (this.cachedContent.size() == 0) { String requestEncoding = getCharacterEncoding(); @@ -134,23 +137,23 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { List values = Arrays.asList(form.get(name)); for (Iterator valueIterator = values.iterator(); valueIterator.hasNext(); ) { String value = valueIterator.next(); - cachedContent.write(URLEncoder.encode(name, requestEncoding).getBytes()); + this.cachedContent.write(URLEncoder.encode(name, requestEncoding).getBytes()); if (value != null) { - cachedContent.write('='); - cachedContent.write(URLEncoder.encode(value, requestEncoding).getBytes()); + this.cachedContent.write('='); + this.cachedContent.write(URLEncoder.encode(value, requestEncoding).getBytes()); if (valueIterator.hasNext()) { - cachedContent.write('&'); + this.cachedContent.write('&'); } } } if (nameIterator.hasNext()) { - cachedContent.write('&'); + this.cachedContent.write('&'); } } } } - catch (IOException e) { - throw new RuntimeException(e); + catch (IOException ex) { + throw new IllegalStateException("Failed to write request parameters to cached content", ex); } } @@ -161,6 +164,7 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { return this.cachedContent.toByteArray(); } + private class ContentCachingInputStream extends ServletInputStream { private final ServletInputStream is; @@ -178,4 +182,5 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { return ch; } } + }