mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-05-07 13:26:44 +02:00
Add jax rs response filter for gzip compression
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
package sonia.scm.filter;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import sonia.scm.util.WebUtil;
|
||||||
|
|
||||||
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
|
import javax.ws.rs.container.ContainerResponseContext;
|
||||||
|
import javax.ws.rs.container.ContainerResponseFilter;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
|
@Provider
|
||||||
|
@Slf4j
|
||||||
|
public class GZipResponseFilter implements ContainerResponseFilter {
|
||||||
|
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
|
||||||
|
if (WebUtil.isGzipSupported(requestContext::getHeaderString)) {
|
||||||
|
log.trace("compress output with gzip");
|
||||||
|
GZIPOutputStream wrappedResponse = new GZIPOutputStream(responseContext.getEntityStream());
|
||||||
|
responseContext.setEntityStream(wrappedResponse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
@@ -266,7 +267,12 @@ public final class WebUtil
|
|||||||
*/
|
*/
|
||||||
public static boolean isGzipSupported(HttpServletRequest request)
|
public static boolean isGzipSupported(HttpServletRequest request)
|
||||||
{
|
{
|
||||||
String enc = request.getHeader(HEADER_ACCEPTENCODING);
|
return isGzipSupported(request::getHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isGzipSupported(Function<String, String> headerResolver)
|
||||||
|
{
|
||||||
|
String enc = headerResolver.apply(HEADER_ACCEPTENCODING);
|
||||||
|
|
||||||
return (enc != null) && enc.contains("gzip");
|
return (enc != null) && enc.contains("gzip");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user