Fehler im Zusammenhang mit dem Komprimieren gepufferter Antworten korrigiert
[percentcodec] / cachecontrol / src / main / java / de / halbekunst / juplo / cachecontrol / CacheControlInterceptor.java
1 package de.halbekunst.juplo.cachecontrol;
2
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;
12
13 /**
14  *
15  * @author kai
16  */
17 public class CacheControlInterceptor implements HandlerInterceptor {
18   private final static Logger log = LoggerFactory.getLogger(CacheControlInterceptor.class);
19
20
21   private CacheControl cacheControl;
22
23
24   @Override
25   public boolean preHandle(
26       HttpServletRequest request,
27       HttpServletResponse response,
28       Object handler
29       ) throws Exception
30   {
31     Cacheable cacheable = handler.getClass().getAnnotation(Cacheable.class);
32     if (cacheable == null) {
33       /** Der Handler ist nicht mit @Cacheable annotiert: keine Dekorationen anbringen! */
34       return true;
35     }
36
37     AccelerationWrapper wrapper = (AccelerationWrapper)request.getAttribute(AcceleratorFilter.RESPONSE_WRAPPER);
38     if (wrapper != null)
39       wrapper.supressGuessing();
40
41     /** CacheControll initialisieren (Handler nach annotierte Methoden scannen etc.) */
42     cacheControl.init(handler, wrapper);
43
44     if (cacheable.eager()) {
45       return cacheControl.decorate(request, response, handler);
46     }
47     else {
48       return true;
49     }
50   }
51
52   @Override
53   public void postHandle(
54       HttpServletRequest request,
55       HttpServletResponse response,
56       Object handler,
57       ModelAndView modelAndView
58       ) throws Exception
59   {
60     cacheControl.decorate(request, response, handler);
61   }
62
63   @Override
64   public void afterCompletion(
65       HttpServletRequest request,
66       HttpServletResponse response,
67       Object handler, Exception ex
68       ) throws Exception
69   {
70     cacheControl.release();
71   }
72
73
74   @Autowired
75   public void setCacheControl(CacheControl cacheControl) {
76     this.cacheControl = cacheControl;
77   }
78 }