Mercurial > dive4elements > river
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 : |