DispatcherServet.checkMultipart considers MultipartException cause as well
Issue: SPR-15178
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2016 the original author or authors.
|
* Copyright 2002-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -1091,7 +1091,7 @@ public class DispatcherServlet extends FrameworkServlet {
|
|||||||
logger.debug("Request is already a MultipartHttpServletRequest - if not in a forward, " +
|
logger.debug("Request is already a MultipartHttpServletRequest - if not in a forward, " +
|
||||||
"this typically results from an additional MultipartFilter in web.xml");
|
"this typically results from an additional MultipartFilter in web.xml");
|
||||||
}
|
}
|
||||||
else if (request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) instanceof MultipartException) {
|
else if (hasMultipartException(request) ) {
|
||||||
logger.debug("Multipart resolution failed for current request before - " +
|
logger.debug("Multipart resolution failed for current request before - " +
|
||||||
"skipping re-resolution for undisturbed error rendering");
|
"skipping re-resolution for undisturbed error rendering");
|
||||||
}
|
}
|
||||||
@@ -1103,6 +1103,20 @@ public class DispatcherServlet extends FrameworkServlet {
|
|||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check "javax.servlet.error.exception" attribute for a multipart exception.
|
||||||
|
*/
|
||||||
|
private boolean hasMultipartException(HttpServletRequest request) {
|
||||||
|
Throwable error = (Throwable) request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE);
|
||||||
|
while (error != null) {
|
||||||
|
if (error instanceof MultipartException) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
error = error.getCause();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean up any resources used by the given multipart request (if any).
|
* Clean up any resources used by the given multipart request (if any).
|
||||||
* @param request current HTTP request
|
* @param request current HTTP request
|
||||||
|
|||||||
Reference in New Issue
Block a user