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; @ApplicationScoped @WebFilter(urlPatterns = "*.js") public class GzipFilter implements Filter { @SuppressWarnings("unused") private static final Logger LOG = LogManager.getLogger(GzipFilter.class); @Override public void init(FilterConfig fc) throws ServletException { } @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); } } private boolean acceptsGZipEncoding(HttpServletRequest httpRequest) { String acceptEncoding = httpRequest.getHeader("Accept-Encoding"); return acceptEncoding != null && acceptEncoding.indexOf("gzip") != -1; } @Override public void destroy() { } }