Issue #1270 Avoid GzipHandler rework by DispatcherType exclusion
This commit is contained in:
parent
a4dd1672da
commit
70866690e4
|
@ -20,9 +20,12 @@ package org.eclipse.jetty.server.handler.gzip;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.zip.Deflater;
|
import java.util.zip.Deflater;
|
||||||
|
|
||||||
|
import javax.servlet.DispatcherType;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -65,6 +68,7 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory
|
||||||
private int _compressionLevel=Deflater.DEFAULT_COMPRESSION;
|
private int _compressionLevel=Deflater.DEFAULT_COMPRESSION;
|
||||||
private boolean _checkGzExists = true;
|
private boolean _checkGzExists = true;
|
||||||
private boolean _syncFlush = false;
|
private boolean _syncFlush = false;
|
||||||
|
private EnumSet<DispatcherType> _dispatchers = EnumSet.of(DispatcherType.REQUEST);
|
||||||
|
|
||||||
// non-static, as other GzipHandler instances may have different configurations
|
// non-static, as other GzipHandler instances may have different configurations
|
||||||
private final ThreadLocal<Deflater> _deflater = new ThreadLocal<>();
|
private final ThreadLocal<Deflater> _deflater = new ThreadLocal<>();
|
||||||
|
@ -126,6 +130,25 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory
|
||||||
_methods.exclude(m);
|
_methods.exclude(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
public EnumSet<DispatcherType> getDispatcherTypes()
|
||||||
|
{
|
||||||
|
return _dispatchers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
public void setDispatcherTypes(EnumSet<DispatcherType> dispatchers)
|
||||||
|
{
|
||||||
|
_dispatchers = dispatchers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
public void setDispatcherTypes(DispatcherType... dispatchers)
|
||||||
|
{
|
||||||
|
_dispatchers = EnumSet.copyOf(Arrays.asList(dispatchers));
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
* Set the mime types.
|
* Set the mime types.
|
||||||
|
@ -349,15 +372,16 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
* Get the minimum reponse size.
|
* Get the minimum response size.
|
||||||
*
|
*
|
||||||
* @return minimum reponse size
|
* @return minimum response size
|
||||||
*/
|
*/
|
||||||
public int getMinGzipSize()
|
public int getMinGzipSize()
|
||||||
{
|
{
|
||||||
return _minGzipSize;
|
return _minGzipSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
protected HttpField getVaryField()
|
protected HttpField getVaryField()
|
||||||
{
|
{
|
||||||
return _vary;
|
return _vary;
|
||||||
|
@ -374,8 +398,15 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory
|
||||||
String path = context==null?baseRequest.getRequestURI():URIUtil.addPaths(baseRequest.getServletPath(),baseRequest.getPathInfo());
|
String path = context==null?baseRequest.getRequestURI():URIUtil.addPaths(baseRequest.getServletPath(),baseRequest.getPathInfo());
|
||||||
LOG.debug("{} handle {} in {}",this,baseRequest,context);
|
LOG.debug("{} handle {} in {}",this,baseRequest,context);
|
||||||
|
|
||||||
HttpOutput out = baseRequest.getResponse().getHttpOutput();
|
if (!_dispatchers.contains(baseRequest.getDispatcherType()))
|
||||||
|
{
|
||||||
|
LOG.debug("{} excluded by dispatcherType {}",this,baseRequest.getDispatcherType());
|
||||||
|
_handler.handle(target,baseRequest, request, response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Are we already being gzipped?
|
// Are we already being gzipped?
|
||||||
|
HttpOutput out = baseRequest.getResponse().getHttpOutput();
|
||||||
HttpOutput.Interceptor interceptor = out.getInterceptor();
|
HttpOutput.Interceptor interceptor = out.getInterceptor();
|
||||||
while (interceptor!=null)
|
while (interceptor!=null)
|
||||||
{
|
{
|
||||||
|
@ -406,7 +437,7 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exclude non compressible mime-types known from URI extension. - no Vary because no matter what client, this URI is always excluded
|
// Exclude non compressible mime-types known from URI extension. - no Vary because no matter what client, this URI is always excluded
|
||||||
String mimeType = context==null?null:context.getMimeType(path);
|
String mimeType = context==null?MimeTypes.getDefaultMimeByExtension(path):context.getMimeType(path);
|
||||||
if (mimeType!=null)
|
if (mimeType!=null)
|
||||||
{
|
{
|
||||||
mimeType = MimeTypes.getContentTypeWithoutCharset(mimeType);
|
mimeType = MimeTypes.getContentTypeWithoutCharset(mimeType);
|
||||||
|
|
Loading…
Reference in New Issue