package org.jboss.seam.web;
import org.jboss.seam.ScopeType;
import org.jboss.seam.log.Logging;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.annotations.web.Filter;
import javax.servlet.FilterChain;
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;
/**
* Provides automatic addition of cache-control HTTP headers to matching resource responses.
*
* @author Christian Bauer
*/
@Scope(ScopeType.APPLICATION)
@Name("org.jboss.seam.web.cacheControlFilter")
@Install(value = false, precedence = Install.BUILT_IN)
@BypassInterceptors
@Filter(within = "org.jboss.seam.web.exceptionFilter")
public class CacheControlFilter extends AbstractFilter
{
private static final LogProvider log = Logging.getLogProvider(CacheControlFilter.class);
private String value;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
if (isMappedToCurrentRequestPath(request))
{
log.debug("Applying Cache-Control HTTP header for resource '"
+ httpRequest.getRequestURI() + "': " + getValue());
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", getValue());
}
chain.doFilter(request, response);
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}