webwork/src/main/webwork/dispatcher CleanupFilter.java,1.1,1.2

[email protected] Wed, 05 Apr 2006 00:50:44 -0700
Newsgroups gmane.comp.java.open-symphony.cvs
Message-ID <[email protected]>
Update of /cvsroot/opensymphony/webwork/src/main/webwork/dispatcher
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25139/src/main/webwork/dispatcher

Modified Files:
	CleanupFilter.java 
Log Message:
Update Cleanup Filter to only run once.  This means that it will work on Orion, which also applies it to include files.

Index: CleanupFilter.java
===================================================================
RCS file: /cvsroot/opensymphony/webwork/src/main/webwork/dispatcher/CleanupFilter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- CleanupFilter.java	28 May 2004 05:02:55 -0000	1.1
+++ CleanupFilter.java	5 Apr 2006 07:50:34 -0000	1.2
@@ -13,18 +13,27 @@
  */
 public class CleanupFilter implements Filter {
     public static final String DO_NOT_CLEAN = "webwork.cleanupfilter";
+    private static final String FILTER_ALREADY_RUN_KEY = CleanupFilter.class.getName() + "_run";
     private static Log LOG = LogFactory.getLog(ServletDispatcher.class);
 
     public void destroy() {
     }
 
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-        servletRequest.setAttribute(DO_NOT_CLEAN,Boolean.TRUE);
-        filterChain.doFilter(servletRequest,servletResponse);
-        GenericDispatcher gd = (GenericDispatcher) servletRequest.getAttribute(ServletDispatcher.GENERIC_DISPATCHER_FOR_CLEANUP);
-        if (gd != null) {
-            LOG.debug("Cleaning up generic dispatcher.");
-            gd.finalizeContext();
+        // ensure the filter is only run one time.  This prevents problems on servers such as Orion
+        // which run filters on includes also.
+        if (servletRequest.getAttribute(FILTER_ALREADY_RUN_KEY) != null) {
+            filterChain.doFilter(servletRequest, servletResponse);
+        }
+        else {
+            servletRequest.setAttribute(FILTER_ALREADY_RUN_KEY, new Boolean(true));
+            servletRequest.setAttribute(DO_NOT_CLEAN,Boolean.TRUE);
+            filterChain.doFilter(servletRequest,servletResponse);
+            GenericDispatcher gd = (GenericDispatcher) servletRequest.getAttribute(ServletDispatcher.GENERIC_DISPATCHER_FOR_CLEANUP);
+            if (gd != null) {
+                LOG.debug("Cleaning up generic dispatcher.");
+                gd.finalizeContext();
+            }
         }
     }
 



-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642