/* * Copyright @ 2013 CurisTEC, S.A.S. All Rights Reserved. */ package net.curisit.securis; import java.io.IOException; import jakarta.enterprise.context.ApplicationScoped; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.FilterConfig; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import net.curisit.securis.utils.GZipServletResponseWrapper; /** * GzipFilter *

* Servlet filter that compresses *.js responses with GZIP when the client * advertises Accept-Encoding: gzip. */ @ApplicationScoped @WebFilter(urlPatterns = "*.js") public class GzipFilter implements Filter { @SuppressWarnings("unused") private static final Logger LOG = LogManager.getLogger(GzipFilter.class); /** init

Filter init hook (unused). */ @Override public void init(FilterConfig fc) throws ServletException { } /** * doFilter *

* Wrap the response with a GZIP-compressing wrapper if supported by the client. */ @Override 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); } } /** * acceptsGZipEncoding *

* @return {@code true} when request header contains "gzip" in Accept-Encoding. */ private boolean acceptsGZipEncoding(HttpServletRequest httpRequest) { String acceptEncoding = httpRequest.getHeader("Accept-Encoding"); return acceptEncoding != null && acceptEncoding.indexOf("gzip") != -1; } /** destroy

Filter destroy hook (unused). */ @Override public void destroy() { } }