I saw that there was a similar question but could not find proper answer ..
Any new answer would be greatly appreciated.
I saw that there was a similar question but could not find proper answer ..
Any new answer would be greatly appreciated.
Try this:
/**
* A filter that modifies a response.
* <p>
* Init-parameters:
* <ul>
* <li>headers: A comma-separated list of init-parameter names. Each init-parameter represents a
* response header to set. Each header value may contain multiple comma-separated values.</li>
* </ul>
* <p>
* @author Gili Tzabari
*/
public class ResponseFilter implements Filter
{
private final MultivaluedMap<String, String> headers = new MultivaluedHashMap<>();
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
String headerNames = filterConfig.getInitParameter("headers");
if (headerNames == null)
return;
Splitter splitter = Splitter.on(',');
for (String name: splitter.split(headerNames))
{
String values = filterConfig.getInitParameter(name);
if (values == null)
continue;
for (String value: splitter.split(values))
headers.add(name, value);
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
if (response instanceof HttpServletResponse)
{
HttpServletResponse httpResponse = (HttpServletResponse) response;
for (String key: headers.keySet())
for (String value: headers.get(key))
httpResponse.addHeader(key, value);
}
chain.doFilter(request, response);
}
@Override
public void destroy()
{
}
}
2. Configure Jetty to inject caching headers into a specific URL pattern:
FilterHolder responseFilter = dynamicResources.addFilter(ResponseFilter.class, "*.js",
EnumSet.allOf(DispatcherType.class));
responseFilter.setInitParameter("headers", "Cache-Control");
responseFilter.setInitParameter("Cache-Control", "max-age=60");