Avoid triggering lazy resolution in MultipartResolver.cleanupMultipart
Issue: SPR-16640
This commit is contained in:
parent
24aae2e104
commit
10cb2ccaef
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -33,6 +33,7 @@ import org.springframework.web.multipart.MaxUploadSizeExceededException;
|
|||
import org.springframework.web.multipart.MultipartException;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springframework.web.multipart.MultipartResolver;
|
||||
import org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest;
|
||||
import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest;
|
||||
import org.springframework.web.util.WebUtils;
|
||||
|
||||
|
@ -188,6 +189,8 @@ public class CommonsMultipartResolver extends CommonsFileUploadSupport
|
|||
|
||||
@Override
|
||||
public void cleanupMultipart(MultipartHttpServletRequest request) {
|
||||
if (!(request instanceof AbstractMultipartHttpServletRequest) ||
|
||||
((AbstractMultipartHttpServletRequest) request).isResolved()) {
|
||||
try {
|
||||
cleanupFileItems(request.getMultiFileMap());
|
||||
}
|
||||
|
@ -195,5 +198,6 @@ public class CommonsMultipartResolver extends CommonsFileUploadSupport
|
|||
logger.warn("Failed to perform multipart cleanup for servlet request", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -108,6 +108,18 @@ public abstract class AbstractMultipartHttpServletRequest extends HttpServletReq
|
|||
return getMultipartFiles();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the underlying multipart request has been resolved.
|
||||
* @return {@code true} when eagerly initialized or lazily triggered,
|
||||
* {@code false} in case of a lazy-resolution request that got aborted
|
||||
* before any parameters or multipart files have been accessed
|
||||
* @since 4.3.15
|
||||
* @see #getMultipartFiles()
|
||||
*/
|
||||
public boolean isResolved() {
|
||||
return (this.multipartFiles != null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set a Map with parameter names as keys and list of MultipartFile objects as values.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -52,6 +52,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
* @author Juergen Hoeller
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 3.1
|
||||
* @see StandardServletMultipartResolver
|
||||
*/
|
||||
public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpServletRequest {
|
||||
|
||||
|
@ -75,9 +76,10 @@ public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpSe
|
|||
* @param lazyParsing whether multipart parsing should be triggered lazily on
|
||||
* first access of multipart files or parameters
|
||||
* @throws MultipartException if an immediate parsing attempt failed
|
||||
* @since 3.2.9
|
||||
*/
|
||||
public StandardMultipartHttpServletRequest(HttpServletRequest request,
|
||||
boolean lazyParsing) throws MultipartException {
|
||||
public StandardMultipartHttpServletRequest(HttpServletRequest request, boolean lazyParsing)
|
||||
throws MultipartException {
|
||||
|
||||
super(request);
|
||||
if (!lazyParsing) {
|
||||
|
|
|
@ -71,6 +71,7 @@ public class StandardServletMultipartResolver implements MultipartResolver {
|
|||
* corresponding exceptions at the time of the {@link #resolveMultipart} call.
|
||||
* Switch this to "true" for lazy multipart parsing, throwing parse exceptions
|
||||
* once the application attempts to obtain multipart files or parameters.
|
||||
* @since 3.2.9
|
||||
*/
|
||||
public void setResolveLazily(boolean resolveLazily) {
|
||||
this.resolveLazily = resolveLazily;
|
||||
|
@ -94,6 +95,8 @@ public class StandardServletMultipartResolver implements MultipartResolver {
|
|||
|
||||
@Override
|
||||
public void cleanupMultipart(MultipartHttpServletRequest request) {
|
||||
if (!(request instanceof AbstractMultipartHttpServletRequest) ||
|
||||
((AbstractMultipartHttpServletRequest) request).isResolved()) {
|
||||
// To be on the safe side: explicitly delete the parts,
|
||||
// but only actual file parts (for Resin compatibility)
|
||||
try {
|
||||
|
@ -107,5 +110,6 @@ public class StandardServletMultipartResolver implements MultipartResolver {
|
|||
LogFactory.getLog(getClass()).warn("Failed to perform cleanup of multipart items", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue