CacheControl so umgebaut, dass es sich über Annotationen einbinden lässt
[percentcodec] / cachecontrol / src / main / java / de / halbekunst / juplo / cachecontrol / CacheControlInterceptor.java
1 package de.halbekunst.juplo.cachecontrol;
2
3 import de.halbekunst.juplo.cachecontrol.annotations.Cacheable;
4 import javax.servlet.http.HttpServletRequest;
5 import javax.servlet.http.HttpServletResponse;
6 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory;
8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.servlet.HandlerInterceptor;
10 import org.springframework.web.servlet.ModelAndView;
11
12 /**
13  *
14  * @author kai
15  */
16 public class CacheControlInterceptor implements HandlerInterceptor {
17   private final static Logger log = LoggerFactory.getLogger(CacheControlInterceptor.class);
18
19
20   private CacheControl cacheControl;
21
22
23   @Override
24   public boolean preHandle(
25       HttpServletRequest request,
26       HttpServletResponse response,
27       Object handler
28       ) throws Exception
29   {
30     Cacheable cacheable = handler.getClass().getAnnotation(Cacheable.class);
31     if (cacheable == null) {
32       /** Der Handler ist nicht mit @Cacheable annotiert: keine Dekorationen anbringen! */
33       return true;
34     }
35
36     /** CacheControll initialisieren (Handler nach annotierte Methoden scannen etc.) */
37     cacheControl.init(handler);
38
39     if (cacheable.eager()) {
40       return cacheControl.decorate(request, response, handler);
41     }
42     else {
43       return true;
44     }
45   }
46
47   @Override
48   public void postHandle(
49       HttpServletRequest request,
50       HttpServletResponse response,
51       Object handler,
52       ModelAndView modelAndView
53       ) throws Exception
54   {
55     cacheControl.decorate(request, response, handler);
56   }
57
58   @Override
59   public void afterCompletion(
60       HttpServletRequest request,
61       HttpServletResponse response,
62       Object handler, Exception ex
63       ) throws Exception
64   {
65     cacheControl.release();
66   }
67
68
69   @Autowired
70   public void setCacheControl(CacheControl cacheControl) {
71     this.cacheControl = cacheControl;
72   }
73 }