package com.idega.servlet.filter; import java.io.IOException; import java.util.Date; 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.HttpServletResponse; import com.idega.idegaweb.DefaultIWBundle; /** * A filter for adding Expires and Cache-Control parameters to force browsers to * cache content. Any URI you register the filter to will get the expires header * added to it with the expiry time (seconds) you set in web.xml * Only adds the header if you are not loading bundles from Eclipse workspace * * <filter> * <filter-name>ExpiresFilter</filter-name> * <filter-class>com.idega.servlet.filter.ExpiresFilter</filter-class> * <init-param> * <param-name>expires</param-name> * <param-value>1800</param-value> * </init-param> * </filter> * * <filter-mapping> * <filter-name>ExpiresFilter</filter-name> * <url-pattern>/idegaweb/bundles/*</url-pattern> * </filter-mapping> * * @author Eirikur S. Hrafnsson * */ public class ExpiresFilter implements Filter { private static final String MAX_AGE_EQUALS = "max-age="; public static final String CACHE_CONTROL_HEADER_NAME = "Cache-Control"; public static final String EXPIRES_HEADER_NAME = "Expires"; private static final String EXPIRES = "expires"; private static long expiresTime = 0L; private static boolean initialize = true; public ExpiresFilter() { } public void init(FilterConfig filterconfig) throws ServletException { if (initialize) { if(System.getProperty(DefaultIWBundle.SYSTEM_BUNDLES_RESOURCE_DIR)==null){ String s = filterconfig.getInitParameter(EXPIRES); if (s != null){ expiresTime = Long.parseLong(s); } } } initialize = false; } public void doFilter(ServletRequest servletrequest,ServletResponse servletresponse, FilterChain filterchain) throws ServletException, IOException { HttpServletResponse httpservletresponse = (HttpServletResponse) servletresponse; if(expiresTime>0){ Date date = new Date(); httpservletresponse.setDateHeader(EXPIRES_HEADER_NAME, date.getTime()+ expiresTime * 1000L); httpservletresponse.setHeader(CACHE_CONTROL_HEADER_NAME, (new StringBuilder()).append(MAX_AGE_EQUALS).append(expiresTime).toString()); } filterchain.doFilter(servletrequest, servletresponse); } public void destroy() { } }