Fehler bei ungültigem If-Modified-Since in CacheControlInterceptor behoben
[percentcodec] / utils / cachecontrol / src / main / java / de / halbekunst / utils / cachecontrol / CacheControlInterceptor.java
index 35b7753..bc2dd3d 100644 (file)
@@ -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;
     }