annotate flys-client/src/main/java/de/intevation/flys/client/server/NoCacheFilter.java @ 4421:0b0f415203f0

Add new Filter class to change caching Add new Filter class to avoid caching of GWT nocache files in browsers and http proxies. The new Filter class NoCacheFilter sets http headers to stop the proxies and browesers from storing the nocache files.
author Björn Ricks <bjoern.ricks@intevation.de>
date Tue, 06 Nov 2012 13:32:06 +0100
parents
children
rev   line source
4421
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.client.server;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
2
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
3 import java.io.IOException;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
4 import java.util.Enumeration;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
5 import java.util.Date;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
6
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
7 import javax.servlet.Filter;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
8 import javax.servlet.FilterChain;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
9 import javax.servlet.FilterConfig;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
10 import javax.servlet.ServletException;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
11 import javax.servlet.ServletRequest;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
12 import javax.servlet.ServletResponse;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
13
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
14 import javax.servlet.http.HttpServletRequest;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
15 import javax.servlet.http.HttpServletResponse;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
16
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
17 import org.apache.log4j.Logger;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
18
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
19 /** ServletFilter to avoid caching for GWTs *.nocache.* files. */
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
20 public class NoCacheFilter implements Filter {
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
21
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
22 private static final long DAY = 86400000L;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
23
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
24 private static final String NO_CACHE = ".nocache.";
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
25
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
26 private static Logger log = Logger.getLogger(NoCacheFilter.class);
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
27
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
28 /**
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
29 * Initialize.
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
30 */
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
31 @Override
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
32 public void init(FilterConfig config)
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
33 throws ServletException
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
34 {
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
35 }
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
36
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
37
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
38 /**
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
39 * Called when filter in chain invoked.
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
40 * @param req request to servlet
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
41 * @param resp response of servlet
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
42 * @param chain the filter chain
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
43 */
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
44 @Override
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
45 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
46 throws IOException, ServletException
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
47 {
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
48 HttpServletRequest httpreq = (HttpServletRequest)req;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
49 String uri = httpreq.getRequestURI();
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
50
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
51 if (uri.contains(NO_CACHE)) {
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
52 log.debug("Set no-cache for " + uri);
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
53
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
54 Date now = new Date();
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
55 HttpServletResponse httpresp = (HttpServletResponse)resp;
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
56 httpresp.setDateHeader("Date", now.getTime());
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
57 httpresp.setDateHeader("Expires", now.getTime() - DAY);
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
58 httpresp.setHeader("Pragma", "no-cache");
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
59 httpresp.setHeader("Cache-control",
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
60 "no-cache, no-store, must-revalidate");
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
61 }
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
62
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
63 chain.doFilter(req, resp);
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
64 }
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
65
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
66
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
67 /**
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
68 * Do nothing at destruction.
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
69 */
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
70 @Override
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
71 public void destroy() {
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
72 }
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
73 }
0b0f415203f0 Add new Filter class to change caching
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff changeset
74 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org