diff options
author | Greg Wilkins | 2011-11-30 04:51:12 +0000 |
---|---|---|
committer | Greg Wilkins | 2011-11-30 04:51:12 +0000 |
commit | 9e72457941e98eb2ee1adf64f2bc53160b01e34d (patch) | |
tree | 04c0cf6fe7d3f5e7e48a313a2321db4ef91caee3 /jetty-servlets | |
parent | df12605f0e3e549c07c96968eedfd382fd6f274e (diff) | |
parent | 24ccaec3da96244861cd1cc8325891b702b69a95 (diff) | |
download | org.eclipse.jetty.project-9e72457941e98eb2ee1adf64f2bc53160b01e34d.tar.gz org.eclipse.jetty.project-9e72457941e98eb2ee1adf64f2bc53160b01e34d.tar.xz org.eclipse.jetty.project-9e72457941e98eb2ee1adf64f2bc53160b01e34d.zip |
Merge branch 'release-8'
Diffstat (limited to 'jetty-servlets')
13 files changed, 117 insertions, 301 deletions
diff --git a/jetty-servlets/pom.xml b/jetty-servlets/pom.xml index 9e112abff9..3be25d852e 100644 --- a/jetty-servlets/pom.xml +++ b/jetty-servlets/pom.xml @@ -3,7 +3,7 @@ <parent> <artifactId>jetty-project</artifactId> <groupId>org.eclipse.jetty</groupId> - <version>7.6.0-SNAPSHOT</version> + <version>8.1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>jetty-servlets</artifactId> @@ -79,11 +79,11 @@ <artifactId>jetty-util</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <scope>provided</scope> - </dependency> + <dependency> + <groupId>${servlet.spec.groupId}</groupId> + <artifactId>${servlet.spec.artifactId}</artifactId> + <scope>provided</scope> + </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>test-jetty-servlet</artifactId> diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/DoSFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/DoSFilter.java index 69bd7d8926..0f75219821 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/DoSFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/DoSFilter.java @@ -335,17 +335,18 @@ public class DoSFilter implements Filter // Reject this request if (_insertHeaders) ((HttpServletResponse)response).addHeader("DoSFilter","unavailable"); + ((HttpServletResponse)response).sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); return; } case 0: { - // fall through to throttle code + // fall through to throttle code request.setAttribute(__TRACKER,tracker); break; } default: - { + { // insert a delay before throttling the request if (_insertHeaders) ((HttpServletResponse)response).addHeader("DoSFilter","delayed"); @@ -353,12 +354,22 @@ public class DoSFilter implements Filter request.setAttribute(__TRACKER,tracker); if (_delayMs > 0) continuation.setTimeout(_delayMs); + continuation.addContinuationListener(new ContinuationListener() + { + + public void onComplete(Continuation continuation) + { + } + + public void onTimeout(Continuation continuation) + { + } + }); continuation.suspend(); return; } } } - // Throttle the request boolean accepted = false; try @@ -412,6 +423,10 @@ public class DoSFilter implements Filter _context.log("DoS",e); ((HttpServletResponse)response).sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); } + catch (Exception e) + { + e.printStackTrace(); + } finally { if (accepted) diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java index 049f37072b..25c0e4635a 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java @@ -14,17 +14,15 @@ package org.eclipse.jetty.servlets; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; -import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; -import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; @@ -34,16 +32,20 @@ import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; +import javax.servlet.MultipartConfigElement; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.Part; -import org.eclipse.jetty.util.B64Code; + +import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.LazyList; import org.eclipse.jetty.util.MultiMap; +import org.eclipse.jetty.util.MultiPartInputStream; import org.eclipse.jetty.util.QuotedStringTokenizer; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.TypeUtil; @@ -60,6 +62,10 @@ import org.eclipse.jetty.util.TypeUtil; * If the init parameter "delete" is set to "true", any files created will be deleted when the * current request returns. * + * Use init parameter "maxFileSize" to set the max size file that can be uploaded. + * + * Use init parameter "maxRequestSize" to limit the size of the multipart request. + * */ public class MultiPartFilter implements Filter { @@ -69,6 +75,8 @@ public class MultiPartFilter implements Filter private boolean _deleteFiles; private ServletContext _context; private int _fileOutputBuffer = 0; + private long _maxFileSize = -1L; + private long _maxRequestSize = -1L; /* ------------------------------------------------------------------------------- */ /** @@ -81,6 +89,13 @@ public class MultiPartFilter implements Filter String fileOutputBuffer = filterConfig.getInitParameter("fileOutputBuffer"); if(fileOutputBuffer!=null) _fileOutputBuffer = Integer.parseInt(fileOutputBuffer); + String maxFileSize = filterConfig.getInitParameter("maxFileSize"); + if (maxFileSize != null) + _maxFileSize = Long.parseLong(maxFileSize.trim()); + String maxRequestSize = filterConfig.getInitParameter("maxRequestSize"); + if (maxRequestSize != null) + _maxRequestSize = Long.parseLong(maxRequestSize.trim()); + _context=filterConfig.getServletContext(); } @@ -102,15 +117,11 @@ public class MultiPartFilter implements Filter InputStream in = new BufferedInputStream(request.getInputStream()); String content_type=srequest.getContentType(); - // TODO - handle encodings - String boundary="--"+QuotedStringTokenizer.unquote(value(content_type.substring(content_type.indexOf("boundary="))).trim()); - - byte[] byteBoundary=(boundary+"--").getBytes(StringUtil.__ISO_8859_1); - - MultiMap params = new MultiMap(); - for (Iterator i = request.getParameterMap().entrySet().iterator();i.hasNext();) + //Get current parameters so we can merge into them + MultiMap<String> params = new MultiMap<String>(); + for (Iterator<Map.Entry<String,String[]>> i = request.getParameterMap().entrySet().iterator();i.hasNext();) { - Map.Entry entry=(Map.Entry)i.next(); + Map.Entry<String,String[]> entry=i.next(); Object value=entry.getValue(); if (value instanceof String[]) params.addValues(entry.getKey(),(String[])value); @@ -118,231 +129,45 @@ public class MultiPartFilter implements Filter params.add(entry.getKey(),value); } + MultipartConfigElement config = new MultipartConfigElement(tempdir.getCanonicalPath(), _maxFileSize, _maxRequestSize, _fileOutputBuffer); + MultiPartInputStream mpis = new MultiPartInputStream(in, content_type, config, tempdir); + + try { - // Get first boundary - byte[] bytes=TypeUtil.readLine(in); - String line=bytes==null?null:new String(bytes,"UTF-8"); - if(line==null || !line.equals(boundary)) + Collection<Part> parts = mpis.getParts(); + if (parts != null) { - throw new IOException("Missing initial multi part boundary"); - } - - // Read each part - boolean lastPart=false; - String content_disposition=null; - String content_transfer_encoding=null; - - - outer:while(!lastPart) - { - String type_content=null; - - while(true) + for (Part p:parts) { - // read a line - bytes=TypeUtil.readLine(in); - if (bytes==null) - break outer; - - // If blank line, end of part headers - if(bytes.length==0) - break; - line=new String(bytes,"UTF-8"); - - // place part header key and value in map - int c=line.indexOf(':',0); - if(c>0) + MultiPartInputStream.MultiPart mp = (MultiPartInputStream.MultiPart)p; + if (mp.getFile() != null) { - String key=line.substring(0,c).trim().toLowerCase(); - String value=line.substring(c+1,line.length()).trim(); - if(key.equals("content-disposition")) - content_disposition=value; - else if(key.equals("content-transfer-encoding")) - content_transfer_encoding=value; - else if (key.equals("content-type")) - type_content = value; - } - } - // Extract content-disposition - boolean form_data=false; - if(content_disposition==null) - { - throw new IOException("Missing content-disposition"); - } - - QuotedStringTokenizer tok=new QuotedStringTokenizer(content_disposition,";"); - String name=null; - String filename=null; - while(tok.hasMoreTokens()) - { - String t=tok.nextToken().trim(); - String tl=t.toLowerCase(); - if(t.startsWith("form-data")) - form_data=true; - else if(tl.startsWith("name=")) - name=value(t); - else if(tl.startsWith("filename=")) - filename=value(t); - } - - // Check disposition - if(!form_data) - { - continue; - } - //It is valid for reset and submit buttons to have an empty name. - //If no name is supplied, the browser skips sending the info for that field. - //However, if you supply the empty string as the name, the browser sends the - //field, with name as the empty string. So, only continue this loop if we - //have not yet seen a name field. - if(name==null) - { - continue; - } - - OutputStream out=null; - File file=null; - try - { - if (filename!=null && filename.length()>0) - { - file = File.createTempFile("MultiPart", "", tempdir); - out = new FileOutputStream(file); - if(_fileOutputBuffer>0) - out = new BufferedOutputStream(out, _fileOutputBuffer); - request.setAttribute(name,file); - params.add(name, filename); - if (type_content != null) - params.add(name+CONTENT_TYPE_SUFFIX, type_content); - + request.setAttribute(mp.getName(),mp.getFile()); + if (mp.getContentDispositionFilename() != null) + params.add(mp.getName(), mp.getContentDispositionFilename()); if (_deleteFiles) { - file.deleteOnExit(); + mp.getFile().deleteOnExit(); + ArrayList files = (ArrayList)request.getAttribute(FILES); if (files==null) { files=new ArrayList(); request.setAttribute(FILES,files); } - files.add(file); - } + files.add(mp.getFile()); + } } else { - out=new ByteArrayOutputStream(); - } - - - if ("base64".equalsIgnoreCase(content_transfer_encoding)) - { - in = new Base64InputStream(in); + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + IO.copy(p.getInputStream(), bytes); + params.add(p.getName(), bytes.toByteArray()); } - else if ("quoted-printable".equalsIgnoreCase(content_transfer_encoding)) - { - in = new FilterInputStream(in) - { - @Override - public int read() throws IOException - { - int c = in.read(); - if (c >= 0 && c == '=') - { - int hi = in.read(); - int lo = in.read(); - if (hi < 0 || lo < 0) - { - throw new IOException("Unexpected end to quoted-printable byte"); - } - char[] chars = new char[] { (char)hi, (char)lo }; - c = Integer.parseInt(new String(chars),16); - } - return c; - } - }; - } - - int state=-2; - int c; - boolean cr=false; - boolean lf=false; - - // loop for all lines` - while(true) - { - int b=0; - while((c=(state!=-2)?state:in.read())!=-1) - { - state=-2; - // look for CR and/or LF - if(c==13||c==10) - { - if(c==13) - state=in.read(); - break; - } - // look for boundary - if(b>=0&&b<byteBoundary.length&&c==byteBoundary[b]) - b++; - else - { - // this is not a boundary - if(cr) - out.write(13); - if(lf) - out.write(10); - cr=lf=false; - if(b>0) - out.write(byteBoundary,0,b); - b=-1; - out.write(c); - } - } - // check partial boundary - if((b>0&&b<byteBoundary.length-2)||(b==byteBoundary.length-1)) - { - if(cr) - out.write(13); - if(lf) - out.write(10); - cr=lf=false; - out.write(byteBoundary,0,b); - b=-1; - } - // boundary match - if(b>0||c==-1) - { - if(b==byteBoundary.length) - lastPart=true; - if(state==10) - state=-2; - break; - } - // handle CR LF - if(cr) - out.write(13); - if(lf) - out.write(10); - cr=(c==13); - lf=(c==10||state==10); - if(state==10) - state=-2; - } - } - finally - { - out.close(); - } - - if (file==null) - { - bytes = ((ByteArrayOutputStream)out).toByteArray(); - params.add(name,bytes); - if (type_content != null) - params.add(name+CONTENT_TYPE_SUFFIX, type_content); } } - + // handle request chain.doFilter(new Wrapper(srequest,params),response); } @@ -504,37 +329,4 @@ public class MultiPartFilter implements Filter _encoding=enc; } } - - private static class Base64InputStream extends InputStream - { - BufferedReader _in; - String _line; - byte[] _buffer; - int _pos; - - public Base64InputStream (InputStream in) - { - _in = new BufferedReader(new InputStreamReader(in)); - } - - @Override - public int read() throws IOException - { - if (_buffer==null || _pos>= _buffer.length) - { - _line = _in.readLine(); - if (_line==null) - return -1; - if (_line.startsWith("--")) - _buffer=(_line+"\r\n").getBytes(); - else if (_line.length()==0) - _buffer="\r\n".getBytes(); - else - _buffer=B64Code.decode(_line); - - _pos=0; - } - return _buffer[_pos++]; - } - } } diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AbstractDoSFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AbstractDoSFilterTest.java index 3774a28bf8..307438acca 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AbstractDoSFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AbstractDoSFilterTest.java @@ -5,7 +5,8 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.Socket; - +import java.util.EnumSet; +import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.Servlet; import javax.servlet.ServletException; @@ -44,7 +45,7 @@ public abstract class AbstractDoSFilterTest _tester.setContextPath("/ctx"); _tester.addServlet(TestServlet.class, "/*"); - _dosFilter = _tester.addFilter(filter, "/dos/*", 0); + _dosFilter = _tester.addFilter(filter, "/dos/*", EnumSet.allOf(DispatcherType.class)); _dosFilter.setInitParameter("maxRequestsPerSec", "4"); _dosFilter.setInitParameter("delayMs", "200"); _dosFilter.setInitParameter("throttledRequests", "1"); @@ -53,7 +54,7 @@ public abstract class AbstractDoSFilterTest _dosFilter.setInitParameter("remotePort", "false"); _dosFilter.setInitParameter("insertHeaders", "true"); - _timeoutFilter = _tester.addFilter(filter, "/timeout/*", 0); + _timeoutFilter = _tester.addFilter(filter, "/timeout/*", EnumSet.allOf(DispatcherType.class)); _timeoutFilter.setInitParameter("maxRequestsPerSec", "4"); _timeoutFilter.setInitParameter("delayMs", "200"); _timeoutFilter.setInitParameter("throttledRequests", "1"); @@ -190,7 +191,7 @@ public abstract class AbstractDoSFilterTest String request="GET /ctx/dos/test HTTP/1.1\r\nHost: localhost\r\n\r\n"; String last="GET /ctx/dos/test HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n"; String responses = doRequests(request+request+request+request,1,0,0,last); - //System.out.println("responses are " + responses); + System.out.println("responses are " + responses); assertEquals("200 OK responses", 5,count(responses,"HTTP/1.1 200 OK")); assertEquals("delayed responses", 1,count(responses,"DoSFilter: delayed")); assertEquals("throttled responses", 1,count(responses,"DoSFilter: throttled")); @@ -226,6 +227,8 @@ public abstract class AbstractDoSFilterTest String last="GET /ctx/dos/test HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n"; String responses = doRequests(request+request+request+request,1,0,0,last); + System.err.println("RESPONSES: \n"+responses); + assertEquals(4,count(responses,"HTTP/1.1 200 OK")); assertEquals(1,count(responses,"HTTP/1.1 503")); assertEquals(1,count(responses,"DoSFilter: delayed")); diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AsyncProxyServer.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AsyncProxyServer.java index 252783d68e..c30133c1ab 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AsyncProxyServer.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AsyncProxyServer.java @@ -13,6 +13,10 @@ package org.eclipse.jetty.servlets; +import java.util.EnumSet; + +import javax.servlet.DispatcherType; + import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.nio.SelectChannelConnector; @@ -32,7 +36,7 @@ public class AsyncProxyServer ServletHandler handler=new ServletHandler(); server.setHandler(handler); - //FilterHolder gzip = handler.addFilterWithMapping("org.eclipse.jetty.servlets.GzipFilter","/*",0); + //FilterHolder gzip = handler.addFilterWithMapping("org.eclipse.jetty.servlet.GzipFilter","/*",EnumSet.of(DispatcherType.REQUEST,DispatcherType.ASYNC)); //gzip.setAsyncSupported(true); //gzip.setInitParameter("minGzipSize","256"); ServletHolder proxy = handler.addServletWithMapping("org.eclipse.jetty.servlets.ProxyServlet","/"); diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CloseableDoSFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CloseableDoSFilterTest.java index 3039a4d787..fa48e85af4 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CloseableDoSFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CloseableDoSFilterTest.java @@ -13,6 +13,7 @@ package org.eclipse.jetty.servlets; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CrossOriginFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CrossOriginFilterTest.java index e59051ffbf..bd9bfb576b 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CrossOriginFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/CrossOriginFilterTest.java @@ -1,8 +1,11 @@ package org.eclipse.jetty.servlets; import java.io.IOException; +import java.util.EnumSet; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; + +import javax.servlet.DispatcherType; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -38,7 +41,7 @@ public class CrossOriginFilterTest @Test public void testRequestWithNoOriginArrivesToApplication() throws Exception { - tester.getContext().addFilter(CrossOriginFilter.class, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(CrossOriginFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST)); final CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -58,7 +61,7 @@ public class CrossOriginFilterTest FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); String origin = "http://localhost"; filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, origin); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -82,7 +85,7 @@ public class CrossOriginFilterTest FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); String origin = "http://localhost"; filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, origin); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -106,7 +109,7 @@ public class CrossOriginFilterTest String origin = "http://localhost"; String otherOrigin = origin.replace("localhost", "127.0.0.1"); filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, origin + "," + otherOrigin); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -129,7 +132,7 @@ public class CrossOriginFilterTest { FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); filterHolder.setInitParameter(CrossOriginFilter.ALLOW_CREDENTIALS_PARAM, "false"); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -154,7 +157,7 @@ public class CrossOriginFilterTest // will contain the CORS response headers. FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -179,7 +182,7 @@ public class CrossOriginFilterTest // will contain the CORS response headers. FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -201,7 +204,7 @@ public class CrossOriginFilterTest { FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "PUT"); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -240,7 +243,7 @@ public class CrossOriginFilterTest FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,HEAD,POST,PUT,DELETE"); filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "X-Requested-With,Content-Type,Accept,Origin,X-Custom"); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*",EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -281,7 +284,7 @@ public class CrossOriginFilterTest { FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,HEAD,POST,PUT,DELETE"); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); @@ -306,7 +309,7 @@ public class CrossOriginFilterTest public void testCrossOriginFilterDisabledForWebSocketUpgrade() throws Exception { FilterHolder filterHolder = new FilterHolder(new CrossOriginFilter()); - tester.getContext().addFilter(filterHolder, "/*", FilterMapping.DEFAULT); + tester.getContext().addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); CountDownLatch latch = new CountDownLatch(1); tester.getContext().addServlet(new ServletHolder(new ResourceServlet(latch)), "/*"); diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/DoSFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/DoSFilterTest.java index a68c11f756..a79ed0e85e 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/DoSFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/DoSFilterTest.java @@ -35,7 +35,8 @@ public class DoSFilterTest extends AbstractDoSFilterTest { public void closeConnection(HttpServletRequest request, HttpServletResponse response, Thread thread) { - try { + try + { response.getWriter().append("DoSFilter: timeout"); super.closeConnection(request,response,thread); } diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/IncludableGzipFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/IncludableGzipFilterTest.java index 63b0dd9d26..3ad66eab23 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/IncludableGzipFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/IncludableGzipFilterTest.java @@ -73,7 +73,7 @@ public class IncludableGzipFilterTest tester.setContextPath("/context"); tester.setResourceBase(testdir.getDir().getCanonicalPath()); tester.addServlet(org.eclipse.jetty.servlet.DefaultServlet.class, "/"); - FilterHolder holder = tester.addFilter(IncludableGzipFilter.class,"/*",0); + FilterHolder holder = tester.addFilter(IncludableGzipFilter.class,"/*",null); holder.setInitParameter("mimeTypes","text/plain"); tester.start(); } diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java index 0dfd6f17bf..9e197341e6 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java @@ -20,7 +20,13 @@ import static org.junit.Assert.assertNotNull; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.OutputStream; +import java.net.Socket; +import java.net.URL; +import java.util.EnumSet; +import java.util.Enumeration; +import javax.servlet.DispatcherType; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -40,21 +46,7 @@ public class MultipartFilterTest private File _dir; private ServletTester tester; - - public static class TestServlet extends DumpServlet - { - - @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException - { - assertNotNull(req.getParameter("fileup")); - assertNotNull(req.getParameter("fileup"+MultiPartFilter.CONTENT_TYPE_SUFFIX)); - assertEquals(req.getParameter("fileup"+MultiPartFilter.CONTENT_TYPE_SUFFIX), "application/octet-stream"); - - super.doPost(req, resp); - } - - } + @Before public void setUp() throws Exception { @@ -67,8 +59,9 @@ public class MultipartFilterTest tester=new ServletTester(); tester.setContextPath("/context"); tester.setResourceBase(_dir.getCanonicalPath()); - tester.addServlet(TestServlet.class, "/"); - FilterHolder multipartFilter = tester.addFilter(MultiPartFilter.class,"/*",FilterMapping.DEFAULT); + tester.addServlet(DumpServlet.class, "/"); + tester.setAttribute("javax.servlet.context.tempdir", _dir); + FilterHolder multipartFilter = tester.addFilter(MultiPartFilter.class,"/*", EnumSet.of(DispatcherType.REQUEST)); multipartFilter.setInitParameter("deleteFiles", "true"); tester.start(); } diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PutFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PutFilterTest.java index c92cc007f8..9d59bddc48 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PutFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PutFilterTest.java @@ -21,6 +21,8 @@ import java.io.FileInputStream; import java.io.OutputStream; import java.net.Socket; import java.net.URL; +import java.util.EnumSet; +import javax.servlet.DispatcherType; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -53,7 +55,7 @@ public class PutFilterTest tester.setContextPath("/context"); tester.setResourceBase(_dir.getCanonicalPath()); tester.addServlet(org.eclipse.jetty.servlet.DefaultServlet.class, "/"); - FilterHolder holder = tester.addFilter(PutFilter.class,"/*",0); + FilterHolder holder = tester.addFilter(PutFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST)); holder.setInitParameter("delAllowed","true"); // Bloody Windows does not allow file renaming if (!System.getProperty("os.name").toLowerCase().contains("windows")) diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java index 85141c2185..5ce86b6be3 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java @@ -17,9 +17,10 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.URL; +import java.util.EnumSet; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; - +import javax.servlet.DispatcherType; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; @@ -93,7 +94,7 @@ public class QoSFilterTest FilterHolder holder = new FilterHolder(QoSFilter2.class); holder.setAsyncSupported(true); holder.setInitParameter(QoSFilter.MAX_REQUESTS_INIT_PARAM, ""+MAX_QOS); - _tester.getContext().getServletHandler().addFilterWithMapping(holder,"/*",FilterMapping.DEFAULT); + _tester.getContext().getServletHandler().addFilterWithMapping(holder,"/*",EnumSet.of(DispatcherType.REQUEST,DispatcherType.ASYNC)); for(int i = 0; i < NUM_CONNECTIONS; ++i ) { @@ -111,8 +112,7 @@ public class QoSFilterTest FilterHolder holder = new FilterHolder(QoSFilter2.class); holder.setAsyncSupported(true); holder.setInitParameter(QoSFilter.MAX_REQUESTS_INIT_PARAM, ""+MAX_QOS); - _tester.getContext().getServletHandler().addFilterWithMapping(holder,"/*",FilterMapping.DEFAULT); - + _tester.getContext().getServletHandler().addFilterWithMapping(holder,"/*",EnumSet.of(DispatcherType.REQUEST,DispatcherType.ASYNC)); for(int i = 0; i < NUM_CONNECTIONS; ++i ) { new Thread(new Worker2(i)).start(); diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java index d0d3e09531..2ebedf60cd 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java @@ -15,11 +15,13 @@ import java.io.IOException; import java.io.InputStream; import java.security.DigestOutputStream; import java.security.MessageDigest; +import java.util.EnumSet; import java.util.Enumeration; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; +import javax.servlet.DispatcherType; import javax.servlet.Servlet; import javax.servlet.http.HttpServletResponse; @@ -348,7 +350,7 @@ public class GzipTester servletTester.setResourceBase(testdir.getDir().getCanonicalPath()); ServletHolder servletHolder = servletTester.addServlet(servletClass,"/"); servletHolder.setInitParameter("baseDir",testdir.getDir().getAbsolutePath()); - FilterHolder holder = servletTester.addFilter(GzipFilter.class,"/*",0); + FilterHolder holder = servletTester.addFilter(GzipFilter.class,"/*",EnumSet.allOf(DispatcherType.class)); return holder; } |