From: Kai Moritz Date: Thu, 23 Jun 2011 16:00:30 +0000 (+0200) Subject: Fehler bei ungültigem If-Modified-Since in CacheControlInterceptor behoben X-Git-Tag: 1.0~5 X-Git-Url: http://juplo.de/gitweb/?a=commitdiff_plain;h=5631089689b322f78d21135521b23e3c531279c8;p=percentcodec Fehler bei ungültigem If-Modified-Since in CacheControlInterceptor behoben * Wenn die Implementierung von Cacheable einen ungültigen (d.h. negativen) Zeitstempel für Last-Modified geliefert hat, hat CacheControlInterceptor fälschlich stets mit 304 Not-Modified geantwortet. * Exception abgefangen, die CacheControlInterceptor geworfen hat, wenn der Request für If-Modified-Since eine Zeitangabe vor dem 1.1.1970 enthalten hat. --- 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..bc2dd3d8 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()); @@ -166,7 +176,7 @@ public class CacheControlInterceptor implements HandlerInterceptor { } return true; - } + } catch (ClassCastException e) { return true; }