/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2007 - 2013 OpenPlans * Copyright 2003 Jayson Falkner (jayson@jspinsider.com) * This code is from "Servlets and JavaServer pages; the J2EE Web Tier", * http://www.jspbook.com. You may freely use the code both commercially * and non-commercially. If you like the code, please pick up a copy of * the book and help support the authors, development of more free code, * and the JSP/Servlet/J2EE community. * * Modified by David Winslow <dwinslow@openplans.org> on 2007-12-13. */ package org.geoserver.filters; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GZIPFilter implements Filter { private Set myCompressedTypes; public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { if (req instanceof HttpServletRequest) { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String ae = request.getHeader("accept-encoding"); if (ae != null && ae.indexOf("gzip") != -1) { GZIPResponseWrapper wrappedResponse = new GZIPResponseWrapper(response, myCompressedTypes, request.getRequestURL().toString()); chain.doFilter(req, wrappedResponse); wrappedResponse.finishResponse(); return; } } chain.doFilter(req, res); } public void init(FilterConfig filterConfig) { try { String compressedTypes = filterConfig.getInitParameter("compressed-types"); String[] typeNames = (compressedTypes == null ? new String[0] : compressedTypes.split(",")); // TODO: Are commas allowed in mimetypes? myCompressedTypes = new HashSet(); for (int i = 0; i < typeNames.length; i++){ myCompressedTypes.add(Pattern.compile(typeNames[i])); } } catch (Exception e){ System.out.println("Error while setting up GZIPFilter; " + e); } } public void destroy() { } }