X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=utils%2Fcachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Futils%2Fcachecontrol%2FCacheControlInterceptor.java;h=088e775ca8fbf5d284a694d6c72225943878b729;hp=35b7753f2c2319df992a4b13a2ea20c221754c1e;hb=c3556bca6ffcc6556393d77fa773b2703e9ad99b;hpb=0295b3393e61631c857497a1d5872538d72a37e7 diff --git a/utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java b/utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java index 35b7753f..088e775c 100644 --- a/utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java +++ b/utils/cachecontrol/src/main/java/de/halbekunst/utils/cachecontrol/CacheControlInterceptor.java @@ -65,7 +65,14 @@ public class CacheControlInterceptor implements HandlerInterceptor { return true; } - long ifModifiedSince = request.getDateHeader(HEADER_IF_MODIFIED_SINCE); + long ifModifiedSince = -1; + try { + ifModifiedSince = request.getDateHeader(HEADER_IF_MODIFIED_SINCE); + } + catch (Exception e) { + log.error("Exception while fetching If-Modified-Since: {}", e); + } + long lastModified = cacheable.getLastModified(request); /** @@ -89,11 +96,14 @@ public class CacheControlInterceptor implements HandlerInterceptor { } - if (ifModifiedSince >= lastModified) { + if (ifModifiedSince >= lastModified && lastModified > 0) { /** * request.getDateHeader liefert die Zeit als long, oder -1, wenn der * Header nicht existiert. D.h., wenn "If-Modified-Since" nicht gesetzt * ist, wird die komplette Seite ausgeliefert. + * Der zusätzliche Test, ob lastModified größer 0 ist, ist nötig, um + * Fehler auszuschließen, wenn die Implementierung von Cachable + * negative Werte für Last-Modified zurückliefert. */ if (log.isDebugEnabled()) log.debug("Not modified since {}: {}", new Date(ifModifiedSince), request.getRequestURI()); @@ -104,13 +114,12 @@ public class CacheControlInterceptor implements HandlerInterceptor { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); return false; } - else { - if (ifNoneMatch.equals(eTag)) { - log.debug("ETag {} not changed: 304 {}", ifNoneMatch, request.getRequestURI()); - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - return false; - } - } + } + + if (ifNoneMatch != null && ifNoneMatch.equals(eTag)) { + log.debug("{}: ETag {} not changed -> 304 ", request.getRequestURI(), ifNoneMatch); + response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + return false; } /** HTTP/1.1-Caching-Header richtig setzen!! */ @@ -166,7 +175,7 @@ public class CacheControlInterceptor implements HandlerInterceptor { } return true; - } + } catch (ClassCastException e) { return true; }