added cache-control header to api response, to fix stale data on ie11

This commit is contained in:
Sebastian Sdorra
2018-11-27 11:33:51 +01:00
parent 0f97fee712
commit ed3917469b
2 changed files with 100 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
package sonia.scm.api.v2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
/**
* Adds the Cache-Control: no-cache header to every api call. But only if non caching headers are set to the response.
* The Cache-Control header should fix stale resources on ie.
*/
@Provider
public class CacheControlResponseFilter implements ContainerResponseFilter {
private static final Logger LOG = LoggerFactory.getLogger(CacheControlResponseFilter.class);
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
if (!isCacheable(responseContext)) {
LOG.trace("add no-cache header to response");
responseContext.getHeaders().add("Cache-Control", "no-cache");
}
}
private boolean isCacheable(ContainerResponseContext responseContext) {
return hasLastModifiedDate(responseContext) || hasEntityTag(responseContext);
}
private boolean hasEntityTag(ContainerResponseContext responseContext) {
return responseContext.getEntityTag() != null;
}
private boolean hasLastModifiedDate(ContainerResponseContext responseContext) {
return responseContext.getLastModified() != null;
}
}