X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2FAcceleratorFilter.java;h=8e63222abfb185e7e3bb2b4b5e889c8304b66b6e;hp=e881a8ed82c71e5021b4df290ed98a37d0e7d6bf;hb=2debc69d4dcf8618c2fc06aa0633fabbf4f98f52;hpb=9f7a8c23d565e8317d03d5916e0ba70cf632d1ba diff --git a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java index e881a8ed..8e63222a 100644 --- a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java +++ b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java @@ -64,7 +64,25 @@ public class AcceleratorFilter implements Filter { HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletResponse httpResponse = (HttpServletResponse)response; - AccelerationWrapper wrapper = new AccelerationWrapper(httpRequest, httpResponse); + + AccelerationWrapper wrapper; + + wrapper = (AccelerationWrapper)request.getAttribute(AcceleratorFilter.RESPONSE_WRAPPER); + if (wrapper != null) { + if (wrapper.getFilter() == this) { + /** Ignore multiple mappings of the same filter-instance */ + log.warn("Ignoring multiple mappings on same URL: {}", httpRequest.getRequestURI()); + chain.doFilter(request, response); + return; + } + else { + log.error("Only one instance of AcceleratorFilter must be mapped to any URL: {}", httpRequest.getRequestURI()); + httpResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Only one instance of AcceleratorFilter must be mapped to any URL!"); + return; + } + } + + wrapper = new AccelerationWrapper(httpRequest, httpResponse); httpRequest.setAttribute(RESPONSE_WRAPPER, wrapper); cacheControl.init(wrapper); try { @@ -143,6 +161,10 @@ public class AcceleratorFilter implements Filter { } + private AcceleratorFilter getFilter() { + return AcceleratorFilter.this; + } + private void finish() throws IOException { flushBuffer(); out.close();