modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java | 76 ++++++++++ modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml | 9 + 2 files changed, 85 insertions(+)
New commits: commit c9efcac6010e5a0a6f64472d1465d8e3cd991545 Author: Ian Springer ian.springer@redhat.com Date: Wed Mar 23 16:58:19 2011 -0400
implement "perfect caching" for GWT-compiled URLs (https://bugzilla.redhat.com/show_bug.cgi?id=617729)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java new file mode 100644 index 0000000..3f49857 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java @@ -0,0 +1,76 @@ +/* + * RHQ Management Platform + * Copyright (C) 2011 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.enterprise.gui.coregui.server.filter; + +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; +import java.io.IOException; +import java.util.Date; + +/** + * Specify the cache policy browsers should use for GWT-compiled files. See + * http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.h... for more info. + * + * @author Ian Springer + */ +public class CacheControlFilter implements Filter { + + private static final long SECONDS_IN_ONE_YEAR = 365 * 24 * 60 * 60L; + private static final long MILLISECONDS_IN_ONE_YEAR = SECONDS_IN_ONE_YEAR * 1000; + + public void init(FilterConfig config) throws ServletException { + return; + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, + ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String requestURI = httpServletRequest.getRequestURI(); + + if (requestURI.contains(".nocache.")) { + // Tell browser to disable caching of the content. + Date now = new Date(); + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setDateHeader("Date", now.getTime()); + httpResponse.setDateHeader("Expires", now.getTime() - 1); + httpResponse.setHeader("Pragma", "no-cache"); + httpResponse.setHeader("Cache-Control", "public, max-age=0, must-revalidate"); + } else if (requestURI.contains(".cache.")) { + // Tell browser to cache the content for one year. + Date now = new Date(); + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setDateHeader("Date", now.getTime()); + httpResponse.setDateHeader("Expires", now.getTime() + MILLISECONDS_IN_ONE_YEAR); + httpResponse.setHeader("Cache-Control", "max-age=" + SECONDS_IN_ONE_YEAR); + } + + filterChain.doFilter(request, response); + } + + public void destroy() { + return; + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml index ac247b1..d06fa58 100644 --- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml +++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml @@ -7,6 +7,15 @@
<display-name>RHQ GUI</display-name>
+ <filter> + <filter-name>CacheControlFilter</filter-name> + <filter-class>org.rhq.enterprise.gui.coregui.server.filter.CacheControlFilter</filter-class> + </filter> + + <filter-mapping> + <filter-name>CacheControlFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping>
<servlet> <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI RoleGWTService</servlet-name>