Java: ResponseHeaders Servlet Filter

Un simple filtro de Tomcat para incluir Headers en las cabeceras de respuesta HTTP (util cuando tienes un Tomcat standalone y quieres incluir un Cache-Control o similar):

import java.io.IOException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

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;

public final class ResponseHeadersFilter implements Filter {
	private Map<String, String> headers = null;

	@Override
	public void init(final FilterConfig filterConfig) throws ServletException {
		final LinkedHashMap<String, String> headers = 
				new LinkedHashMap<String, String>();
		final Enumeration<String> e = filterConfig.getInitParameterNames();
		while (e.hasMoreElements()) {
			final String name = e.nextElement();
			final String value = filterConfig.getInitParameter(name);
			headers.put(name, value);
		}
		this.headers = Collections.unmodifiableMap(headers);
	}

	@Override
	public void doFilter(final ServletRequest request, 
			final ServletResponse response, final FilterChain chain)
			throws IOException, ServletException {
		if (response instanceof HttpServletResponse) {
			final HttpServletResponse res = ((HttpServletResponse) response);
			for (final Entry<String, String> e : headers.entrySet()) {
				res.setHeader(e.getKey(), e.getValue());
			}
		}
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {
	}
}

Y la configuracion del web.xml:

    <filter>
        <filter-name>ResponseHeadersFilter</filter-name>
        <filter-class>com.package.ResponseHeadersFilter</filter-class>
        <init-param>
           <param-name>Cache-Control</param-name>
           <param-value>must-revalidate, max-age=0, no-cache, no-store</param-value>
        </init-param>
        <init-param>
           <param-name>Expires</param-name>
           <param-value>0</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ResponseHeadersFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

La salida sera algo asi:

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Cache-Control: must-revalidate, max-age=0, no-cache, no-store
Expires: 0
Content-Length: 3
Date: Sat, 04 Jan 2014 05:40:23 GMT

...

Source code: ResponseHeadersFilter.java

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: