From 5631089689b322f78d21135521b23e3c531279c8 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 23 Jun 2011 18:00:30 +0200 Subject: [PATCH] =?utf8?q?Fehler=20bei=20ung=C3=BCltigem=20If-Modified-Sin?= =?utf8?q?ce=20in=20CacheControlInterceptor=20behoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * 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. --- .../cachecontrol/CacheControlInterceptor.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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; } -- 2.20.1