SCM-Daten ergänzt
[percentcodec] / accelerator / src / main / java / de / juplo / accelerator / CacheControlInterceptor.java
1 package de.juplo.accelerator;
2
3 import de.juplo.accelerator.AcceleratorFilter.AccelerationWrapper;
4 import de.juplo.accelerator.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);
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     /**
61      * Dekoration nur dann anstossen, wenn sie nicht bereits von dem
62      * AcceleratorFilter ausgelöst wird.
63      */
64     if (request.getAttribute(AcceleratorFilter.RESPONSE_WRAPPER) == null)
65       cacheControl.decorate(request, response);
66   }
67
68   @Override
69   public void afterCompletion(
70       HttpServletRequest request,
71       HttpServletResponse response,
72       Object handler, Exception ex
73       ) throws Exception
74   {
75     cacheControl.release();
76   }
77
78
79   @Autowired
80   public void setCacheControl(CacheControl cacheControl) {
81     this.cacheControl = cacheControl;
82   }
83 }