From d00705286218a5f501ab18bc8a50ec22f043b8b7 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Thu, 08 Jun 2017 17:15:11 +0000
Subject: [PATCH] #0 enh - Gzipping main bundle on the fly

---
 securis/src/main/java/net/curisit/securis/GzipFilter.java |   29 ++++++++++++++++++++++-------
 1 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/GzipFilter.java b/securis/src/main/java/net/curisit/securis/GzipFilter.java
index 6e448d9..4c0682c 100644
--- a/securis/src/main/java/net/curisit/securis/GzipFilter.java
+++ b/securis/src/main/java/net/curisit/securis/GzipFilter.java
@@ -10,13 +10,16 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import net.curisit.securis.utils.GZipServletResponseWrapper;
+
 @ApplicationScoped
-@WebFilter(urlPatterns = "*.gz")
+@WebFilter(urlPatterns = "*.js")
 public class GzipFilter implements Filter {
 
 	@SuppressWarnings("unused")
@@ -27,12 +30,24 @@
 	}
 
 	@Override
-	public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain fc) throws IOException, ServletException {
-		//HttpServletRequest req = (HttpServletRequest) sreq;
-		HttpServletResponse res = (HttpServletResponse) sres;
-		res.addHeader("Content-Encoding", "gzip");
-		// LOG.info("Content served as gzip: {}", req.getRequestURI());
-		fc.doFilter(sreq, sres);
+	public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain chain) throws IOException, ServletException {
+		HttpServletRequest httpRequest = (HttpServletRequest) sreq;
+		HttpServletResponse httpResponse = (HttpServletResponse) sres;
+
+		if (acceptsGZipEncoding(httpRequest)) {
+			httpResponse.addHeader("Content-Encoding", "gzip");
+			GZipServletResponseWrapper gzipResponse = new GZipServletResponseWrapper(httpResponse);
+			chain.doFilter(sreq, gzipResponse);
+			gzipResponse.close();
+		} else {
+			chain.doFilter(sreq, sres);
+		}
+	}
+
+	private boolean acceptsGZipEncoding(HttpServletRequest httpRequest) {
+		String acceptEncoding = httpRequest.getHeader("Accept-Encoding");
+
+		return acceptEncoding != null && acceptEncoding.indexOf("gzip") != -1;
 	}
 
 	@Override

--
Gitblit v1.3.2