1 package org.appfuse.webapp.filter; 2 3 import java.io.IOException ; 4 5 import javax.servlet.FilterChain ; 6 import javax.servlet.ServletException ; 7 import javax.servlet.http.HttpServletRequest ; 8 import javax.servlet.http.HttpServletResponse ; 9 10 import org.apache.commons.logging.Log; 11 import org.apache.commons.logging.LogFactory; 12 import org.displaytag.tags.TableTagParameters; 13 import org.springframework.web.filter.OncePerRequestFilter; 14 15 27 public class GZIPFilter extends OncePerRequestFilter { 28 private final transient Log log = LogFactory.getLog(GZIPFilter.class); 29 30 public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, 31 FilterChain chain) 32 throws IOException , ServletException { 33 34 if (isGZIPSupported(request)) { 35 if (log.isDebugEnabled()) { 36 log.debug("GZIP supported, compressing response"); 37 } 38 39 GZIPResponseWrapper wrappedResponse = 40 new GZIPResponseWrapper(response); 41 42 chain.doFilter(request, wrappedResponse); 43 wrappedResponse.finishResponse(); 44 45 return; 46 } 47 48 chain.doFilter(request, response); 49 } 50 51 56 private boolean isGZIPSupported(HttpServletRequest req) { 57 58 String exporting = req.getParameter(TableTagParameters.PARAMETER_EXPORTING); 60 61 if (exporting != null) { 62 log.debug("detected excel export, disabling filter..."); 63 return false; 64 } 65 66 String browserEncodings = req.getHeader("accept-encoding"); 67 boolean supported = ((browserEncodings != null) && 68 (browserEncodings.indexOf("gzip") != -1)); 69 70 String userAgent = req.getHeader("user-agent"); 71 72 if ((userAgent != null) && userAgent.startsWith("httpunit")) { 73 log.debug("httpunit detected, disabling filter..."); 74 75 return false; 76 } else { 77 return supported; 78 } 79 } 80 } 81 | Popular Tags |