diff options
author | Jan Bartel | 2012-10-04 08:31:09 +0000 |
---|---|---|
committer | Jan Bartel | 2012-10-04 08:31:09 +0000 |
commit | 36a2ed10beb3fb2aaaae28155566f7f0b9fdea70 (patch) | |
tree | 4fd15935c7dffebc07bb6d64d77455f334b7433b /jetty-server/src/main/java | |
parent | 25cdef966ce4082856b3c4e0d65120f4ccac3242 (diff) | |
download | org.eclipse.jetty.project-36a2ed10beb3fb2aaaae28155566f7f0b9fdea70.tar.gz org.eclipse.jetty.project-36a2ed10beb3fb2aaaae28155566f7f0b9fdea70.tar.xz org.eclipse.jetty.project-36a2ed10beb3fb2aaaae28155566f7f0b9fdea70.zip |
391080 Multipart temp files can be left on disk from Request.getPart and getParts
Diffstat (limited to 'jetty-server/src/main/java')
-rw-r--r-- | jetty-server/src/main/java/org/eclipse/jetty/server/Request.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java index db32fdc258..ef57580220 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java @@ -50,6 +50,8 @@ import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletRequestAttributeEvent; import javax.servlet.ServletRequestAttributeListener; +import javax.servlet.ServletRequestEvent; +import javax.servlet.ServletRequestListener; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -80,6 +82,7 @@ import org.eclipse.jetty.server.handler.ContextHandler.Context; import org.eclipse.jetty.util.Attributes; import org.eclipse.jetty.util.AttributesMap; import org.eclipse.jetty.util.LazyList; +import org.eclipse.jetty.util.MultiException; import org.eclipse.jetty.util.MultiMap; import org.eclipse.jetty.util.MultiPartInputStream; import org.eclipse.jetty.util.StringUtil; @@ -123,12 +126,44 @@ import org.eclipse.jetty.util.log.Logger; public class Request implements HttpServletRequest { public static final String __MULTIPART_CONFIG_ELEMENT = "org.eclipse.multipartConfig"; + public static final String __MULTIPART_INPUT_STREAM = "org.eclipse.multiPartInputStream"; + private static final Logger LOG = Log.getLogger(Request.class); private static final String __ASYNC_FWD = "org.eclipse.asyncfwd"; private static final Collection __defaultLocale = Collections.singleton(Locale.getDefault()); private static final int __NONE = 0, _STREAM = 1, __READER = 2; + public static class MultiPartCleanerListener implements ServletRequestListener + { + + @Override + public void requestDestroyed(ServletRequestEvent sre) + { + //Clean up any tmp files created by MultiPartInputStream + MultiPartInputStream mpis = (MultiPartInputStream)sre.getServletRequest().getAttribute(__MULTIPART_INPUT_STREAM); + if (mpis != null) + { + try + { + mpis.deleteParts(); + } + catch (MultiException e) + { + sre.getServletContext().log("Errors deleting multipart tmp files", e); + } + } + } + + @Override + public void requestInitialized(ServletRequestEvent sre) + { + //nothing to do, multipart config set up by ServletHolder.handle() + } + + } + + /* ------------------------------------------------------------ */ public static Request getRequest(HttpServletRequest request) { @@ -1975,6 +2010,7 @@ public class Request implements HttpServletRequest _multiPartInputStream = new MultiPartInputStream(getInputStream(), getContentType(),(MultipartConfigElement)getAttribute(__MULTIPART_CONFIG_ELEMENT), (_context != null?(File)_context.getAttribute("javax.servlet.context.tempdir"):null)); + setAttribute(__MULTIPART_INPUT_STREAM, _multiPartInputStream); Collection<Part> parts = _multiPartInputStream.getParts(); //causes parsing for (Part p:parts) { @@ -2006,6 +2042,7 @@ public class Request implements HttpServletRequest _multiPartInputStream = new MultiPartInputStream(getInputStream(), getContentType(),(MultipartConfigElement)getAttribute(__MULTIPART_CONFIG_ELEMENT), (_context != null?(File)_context.getAttribute("javax.servlet.context.tempdir"):null)); + setAttribute(__MULTIPART_INPUT_STREAM, _multiPartInputStream); Collection<Part> parts = _multiPartInputStream.getParts(); //causes parsing for (Part p:parts) { |