1 26 package org.jresearch.gossip.filters.gzip; 27 28 import java.io.IOException ; 29 30 import javax.servlet.Filter ; 31 import javax.servlet.FilterChain ; 32 import javax.servlet.FilterConfig ; 33 import javax.servlet.ServletException ; 34 import javax.servlet.ServletRequest ; 35 import javax.servlet.ServletResponse ; 36 import javax.servlet.http.HttpServletRequest ; 37 import javax.servlet.http.HttpServletResponse ; 38 39 import org.apache.log.Logger; 40 import org.jresearch.gossip.IConst; 41 import org.jresearch.gossip.configuration.Configurator; 42 import org.jresearch.gossip.exception.ConfiguratorException; 43 import org.jresearch.gossip.exception.SystemException; 44 import org.jresearch.gossip.log.avalon.JGossipLog; 45 46 50 public class CompressionFilter implements Filter { 51 52 public static final String GZIP_NOT_ALLOWED = "GZIP_NOT_ALLOWED"; 53 54 private FilterConfig config; 55 56 75 public void doFilter(ServletRequest request, ServletResponse response, 76 FilterChain chain) throws ServletException , IOException { 77 HttpServletRequest req = (HttpServletRequest ) request; 78 HttpServletResponse res = (HttpServletResponse ) response; 79 80 try { 81 if ((!isGzipSupported(req)) 82 || (IConst.VALUES.FALSE.equals(Configurator.getInstance() 83 .get(IConst.CONFIG.GZIP_COMPRESS))) 84 || (req.getParameter(GZIP_NOT_ALLOWED) != null)) { 85 try { 86 Logger log = JGossipLog.getInstance().getAppLogger(); 87 if (log.isDebugEnabled()) { 88 log.debug("Invoke resource normally."); 89 } 90 } catch (SystemException e1) { 91 } 92 chain.doFilter(req, res); 93 } else { 94 GZIPResponseWrapper wrappedResponse = new GZIPResponseWrapper( 95 res); 96 chain.doFilter(req, wrappedResponse); 97 wrappedResponse.finishResponse(); 98 } 99 } catch (ConfiguratorException e) { 100 throw new ServletException (e); 101 } 102 } 103 104 113 public void init(FilterConfig config) throws ServletException { 114 this.config = config; 115 } 116 117 122 protected FilterConfig getFilterConfig() { 123 return (config); 124 } 125 126 129 public void destroy() { 130 } 131 132 private boolean isGzipSupported(HttpServletRequest req) { 133 String browserEncodings = req.getHeader("Accept-Encoding"); 134 135 return ((browserEncodings != null) && (browserEncodings.indexOf("gzip") != -1)); 136 } 137 } | Popular Tags |