1 package com.blandware.atleap.webapp.filter; 2 3 import org.apache.commons.logging.Log; 4 import org.apache.commons.logging.LogFactory; 5 6 import javax.servlet.Filter ; 7 import javax.servlet.FilterChain ; 8 import javax.servlet.FilterConfig ; 9 import javax.servlet.ServletException ; 10 import javax.servlet.ServletRequest ; 11 import javax.servlet.ServletResponse ; 12 import javax.servlet.http.HttpServletRequest ; 13 import javax.servlet.http.HttpServletResponse ; 14 import java.io.IOException ; 15 16 17 28 public class GZIPFilter implements Filter { 29 protected transient final Log log = LogFactory.getLog(GZIPFilter.class); 30 31 public void doFilter(ServletRequest req, ServletResponse res, 32 FilterChain chain) 33 throws IOException , ServletException { 34 if ( req instanceof HttpServletRequest ) { 35 HttpServletRequest request = (HttpServletRequest ) req; 36 HttpServletResponse response = (HttpServletResponse ) res; 37 38 if ( isGZIPSupported(request) ) { 39 if ( log.isDebugEnabled() ) { 40 log.debug("GZIP supported, compressing response"); 41 } 42 43 GZIPResponseWrapper wrappedResponse = 44 new GZIPResponseWrapper(response); 45 46 chain.doFilter(req, wrappedResponse); 47 wrappedResponse.finishResponse(); 48 49 return; 50 } 51 52 chain.doFilter(req, res); 53 } 54 } 55 56 62 protected boolean isGZIPSupported(HttpServletRequest req) { 63 String browserEncodings = req.getHeader("accept-encoding"); 64 boolean supported = 65 ((browserEncodings != null) && 66 (browserEncodings.indexOf("gzip") != -1)); 67 68 String userAgent = req.getHeader("user-agent"); 69 70 if ( (userAgent != null) && userAgent.startsWith("httpunit") ) { 71 if ( log.isDebugEnabled() ) { 72 log.debug("httpunit detected, disabling filter..."); 73 } 74 75 return false; 76 } else { 77 return supported; 78 } 79 } 80 81 public void init(FilterConfig filterConfig) { 82 } 83 84 public void destroy() { 85 } 86 } 87 | Popular Tags |