1 package de.halbekunst.juplo.cachecontrol;
3 import de.halbekunst.juplo.cachecontrol.AcceleratorFilter.AccelerationWrapper;
4 import de.halbekunst.juplo.cachecontrol.annotations.Cacheable;
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.web.servlet.HandlerInterceptor;
11 import org.springframework.web.servlet.ModelAndView;
17 public class CacheControlInterceptor implements HandlerInterceptor {
18 private final static Logger log = LoggerFactory.getLogger(CacheControlInterceptor.class);
21 private CacheControl cacheControl;
25 public boolean preHandle(
26 HttpServletRequest request,
27 HttpServletResponse response,
31 Cacheable cacheable = handler.getClass().getAnnotation(Cacheable.class);
32 if (cacheable == null) {
33 /** Der Handler ist nicht mit @Cacheable annotiert: keine Dekorationen anbringen! */
37 /** CacheControll initialisieren (Handler nach annotierte Methoden scannen etc.) */
38 cacheControl.init(handler);
40 AccelerationWrapper wrapper = (AccelerationWrapper)request.getAttribute(AcceleratorFilter.RESPONSE_WRAPPER);
41 if (wrapper != null) {
42 wrapper.guessingFinished();
43 if (log.isInfoEnabled()) {
44 StringBuilder builder = new StringBuilder();
45 builder.append("request should not be filtered, because it is intercepted: ");
46 builder.append(request.getRequestURI());
47 if (request.getQueryString() == null) {
49 builder.append(request.getQueryString());
51 log.info(builder.toString());
55 if (cacheable.eager()) {
56 return cacheControl.decorate(request, response, handler);
64 public void postHandle(
65 HttpServletRequest request,
66 HttpServletResponse response,
68 ModelAndView modelAndView
71 cacheControl.decorate(request, response, handler);
75 public void afterCompletion(
76 HttpServletRequest request,
77 HttpServletResponse response,
78 Object handler, Exception ex
81 cacheControl.release();
86 public void setCacheControl(CacheControl cacheControl) {
87 this.cacheControl = cacheControl;