1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.talika.tarsis.filters.cache;
24
25 import java.io.IOException;
26
27 import javax.servlet.FilterChain;
28 import javax.servlet.ServletException;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.ServletResponse;
31 import javax.servlet.http.HttpServletResponse;
32
33 import org.talika.tarsis.command.Command;
34 import org.talika.tarsis.filters.CommandFilter;
35
36 /**
37 * Cache filter checks if command is cacheable and then sets no cache HTTP response
38 * headers.
39 *
40 * @author Jose M. Palomar
41 * @version $Revision: 269 $
42 *
43 * @todo Move to org.talika.tarsis.filters package.
44 */
45
46 public final class CacheFilter extends CommandFilter {
47
48
49
50
51 /**
52 * Checks if command is cacheable and then sets no cache HTTP response headers.
53 *
54 * @param servletRequest ServletRequest the <code>ServletRequest</code> object
55 * that contains the client's request.
56 * @param servletResponse ServletResponse the <code>ServletResponse</code> object
57 * that contains the servlet's response.
58 * @param filterChain FilterChain invocation chain of filtered request.
59 * @throws IOException if an input or output exception occurs
60 * @throws ServletException if an exception has occurred that interferes with the
61 * filter's normal operation
62 * @see javax.servlet.Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
63 */
64 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
65 FilterChain filterChain)
66 throws IOException, ServletException {
67
68 if (getLogger().isDebugEnabled()) {
69 getLogger().logDebug(getFilterConfig().getFilterName() + ": invoked");
70 }
71
72 try {
73 Command cmd = findCommand(servletRequest);
74 if (cmd != null) {
75 if (!cmd.isCacheable()) {
76 HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
77 httpServletResponse.setHeader("Pragma", "No-cache");
78 httpServletResponse.setHeader("Cache-Control", "no-cache");
79 httpServletResponse.setDateHeader("Expires", 1);
80 }
81 }
82 }
83 catch (Throwable t) {
84 throw new ServletException(t);
85 }
86
87 filterChain.doFilter(servletRequest, servletResponse);
88
89 }
90
91 }