You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@apache.org on 2001/07/30 22:35:49 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util InstanceSupport.java

craigmcc    01/07/30 13:35:49

  Modified:    catalina/src/share/org/apache/catalina InstanceEvent.java
               catalina/src/share/org/apache/catalina/core
                        ApplicationFilterChain.java
               catalina/src/share/org/apache/catalina/util
                        InstanceSupport.java
  Log:
  Enhance InstanceEvent to include "request" and "response" properties for
  the BEFORE_FILTER_EVENT, AFTER_FILTER_EVENT, BEFORE_SERVICE_EVENT, and
  AFTER_SERVICE_EVENT events.  This allows event listeners to access other
  information relevant to the current request and response being processed
  when these events occur.
  
  This is the second of three patches required for BugTraq #4485977.
  
  Revision  Changes    Path
  1.5       +92 -6     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/InstanceEvent.java
  
  Index: InstanceEvent.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/InstanceEvent.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InstanceEvent.java	2001/07/22 20:13:30	1.4
  +++ InstanceEvent.java	2001/07/30 20:35:49	1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/InstanceEvent.java,v 1.4 2001/07/22 20:13:30 pier Exp $
  - * $Revision: 1.4 $
  - * $Date: 2001/07/22 20:13:30 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/InstanceEvent.java,v 1.5 2001/07/30 20:35:49 craigmcc Exp $
  + * $Revision: 1.5 $
  + * $Date: 2001/07/30 20:35:49 $
    *
    * ====================================================================
    *
  @@ -68,6 +68,8 @@
   import java.util.EventObject;
   import javax.servlet.Filter;
   import javax.servlet.Servlet;
  +import javax.servlet.ServletRequest;
  +import javax.servlet.ServletResponse;
   
   
   /**
  @@ -76,7 +78,7 @@
    * as opposed to the Wrapper component that manages it.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.4 $ $Date: 2001/07/22 20:13:30 $
  + * @version $Revision: 1.5 $ $Date: 2001/07/30 20:35:49 $
    */
   
   public final class InstanceEvent
  @@ -147,7 +149,8 @@
   
   
       /**
  -     * Construct a new InstanceEvent with the specified parameters.
  +     * Construct a new InstanceEvent with the specified parameters.  This
  +     * constructor is used for filter lifecycle events.
        *
        * @param wrapper Wrapper managing this servlet instance
        * @param filter Filter instance for which this event occurred
  @@ -165,9 +168,34 @@
   
   
       /**
  -     * Construct a new InstanceEvent with the specified parameters.
  +     * Construct a new InstanceEvent with the specified parameters.  This
  +     * constructor is used for filter processing events.
        *
        * @param wrapper Wrapper managing this servlet instance
  +     * @param filter Filter instance for which this event occurred
  +     * @param type Event type (required)
  +     * @param request Servlet request we are processing
  +     * @param response Servlet response we are processing
  +     */
  +    public InstanceEvent(Wrapper wrapper, Filter filter, String type,
  +                         ServletRequest request, ServletResponse response) {
  +
  +      super(wrapper);
  +      this.wrapper = wrapper;
  +      this.filter = filter;
  +      this.servlet = null;
  +      this.type = type;
  +      this.request = request;
  +      this.response = response;
  +
  +    }
  +
  +
  +    /**
  +     * Construct a new InstanceEvent with the specified parameters.  This
  +     * constructor is used for processing servlet lifecycle events.
  +     *
  +     * @param wrapper Wrapper managing this servlet instance
        * @param servlet Servlet instance for which this event occurred
        * @param type Event type (required)
        */
  @@ -182,6 +210,30 @@
       }
   
   
  +    /**
  +     * Construct a new InstanceEvent with the specified parameters.  This
  +     * constructor is used for processing servlet processing events.
  +     *
  +     * @param wrapper Wrapper managing this servlet instance
  +     * @param servlet Servlet instance for which this event occurred
  +     * @param type Event type (required)
  +     * @param request Servlet request we are processing
  +     * @param response Servlet response we are processing
  +     */
  +    public InstanceEvent(Wrapper wrapper, Servlet servlet, String type,
  +                         ServletRequest request, ServletResponse response) {
  +
  +      super(wrapper);
  +      this.wrapper = wrapper;
  +      this.filter = null;
  +      this.servlet = servlet;
  +      this.type = type;
  +      this.request = request;
  +      this.response = response;
  +
  +    }
  +
  +
       // ----------------------------------------------------- Instance Variables
   
   
  @@ -193,6 +245,20 @@
   
   
       /**
  +     * The servlet request being processed (BEFORE_FILTER_EVENT,
  +     * AFTER_FILTER_EVENT, BEFORE_SERVICE_EVENT, and AFTER_SERVICE_EVENT).
  +     */
  +    private ServletRequest request = null;
  +
  +
  +    /**
  +     * The servlet response being processed (BEFORE_FILTER_EVENT,
  +     * AFTER_FILTER_EVENT, BEFORE_SERVICE_EVENT, and AFTER_SERVICE_EVENT).
  +     */
  +    private ServletResponse response = null;
  +
  +
  +    /**
        * The Servlet instance for which this event occurred (not present on
        * BEFORE_FILTER_EVENT or AFTER_FILTER_EVENT events).
        */
  @@ -220,6 +286,26 @@
       public Filter getFilter() {
   
           return (this.filter);
  +
  +    }
  +
  +
  +    /**
  +     * Return the servlet request for which this event occurred.
  +     */
  +    public ServletRequest getRequest() {
  +
  +        return (this.request);
  +
  +    }
  +
  +
  +    /**
  +     * Return the servlet response for which this event occurred.
  +     */
  +    public ServletResponse getResponse() {
  +
  +        return (this.response);
   
       }
   
  
  
  
  1.10      +16 -16    jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java
  
  Index: ApplicationFilterChain.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ApplicationFilterChain.java	2001/07/22 20:25:08	1.9
  +++ ApplicationFilterChain.java	2001/07/30 20:35:49	1.10
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v 1.9 2001/07/22 20:25:08 pier Exp $
  - * $Revision: 1.9 $
  - * $Date: 2001/07/22 20:25:08 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v 1.10 2001/07/30 20:35:49 craigmcc Exp $
  + * $Revision: 1.10 $
  + * $Date: 2001/07/30 20:35:49 $
    *
    * ====================================================================
    *
  @@ -92,7 +92,7 @@
    * method itself.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.9 $ $Date: 2001/07/22 20:25:08 $
  + * @version $Revision: 1.10 $ $Date: 2001/07/30 20:35:49 $
    */
   
   final class ApplicationFilterChain implements FilterChain {
  @@ -209,29 +209,29 @@
               try {
                   filter = filterConfig.getFilter();
                   support.fireInstanceEvent(InstanceEvent.BEFORE_FILTER_EVENT,
  -                                          filter);
  +                                          filter, request, response);
                   filter.doFilter(request, response, this);
                   support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
  -                                          filter);
  +                                          filter, request, response);
               } catch (IOException e) {
                   if (filter != null)
                       support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
  -                                              filter);
  +                                              filter, request, response);
                   throw e;
               } catch (ServletException e) {
                   if (filter != null)
                       support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
  -                                              filter);
  +                                              filter, request, response);
                   throw e;
               } catch (RuntimeException e) {
                   if (filter != null)
                       support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
  -                                              filter);
  +                                              filter, request, response);
                   throw e;
               } catch (Throwable e) {
                   if (filter != null)
                       support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
  -                                              filter);
  +                                              filter, request, response);
                   throw new ServletException
                     (sm.getString("filterChain.filter"), e);
               }
  @@ -241,7 +241,7 @@
           // We fell off the end of the chain -- call the servlet instance
           try {
               support.fireInstanceEvent(InstanceEvent.BEFORE_SERVICE_EVENT,
  -                                      servlet);
  +                                      servlet, request, response);
               if ((request instanceof HttpServletRequest) &&
                   (response instanceof HttpServletResponse)) {
                   servlet.service((HttpServletRequest) request,
  @@ -250,22 +250,22 @@
                   servlet.service(request, response);
               }
               support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
  -                                      servlet);
  +                                      servlet, request, response);
           } catch (IOException e) {
               support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
  -                                      servlet);
  +                                      servlet, request, response);
               throw e;
           } catch (ServletException e) {
               support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
  -                                      servlet);
  +                                      servlet, request, response);
               throw e;
           } catch (RuntimeException e) {
               support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
  -                                      servlet);
  +                                      servlet, request, response);
               throw e;
           } catch (Throwable e) {
               support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
  -                                      servlet);
  +                                      servlet, request, response);
               throw new ServletException
                 (sm.getString("filterChain.servlet"), e);
           }
  
  
  
  1.4       +64 -4     jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/InstanceSupport.java
  
  Index: InstanceSupport.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/InstanceSupport.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InstanceSupport.java	2001/07/22 20:25:13	1.3
  +++ InstanceSupport.java	2001/07/30 20:35:49	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/InstanceSupport.java,v 1.3 2001/07/22 20:25:13 pier Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/07/22 20:25:13 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/InstanceSupport.java,v 1.4 2001/07/30 20:35:49 craigmcc Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/07/30 20:35:49 $
    *
    * ====================================================================
    *
  @@ -67,6 +67,8 @@
   
   import javax.servlet.Filter;
   import javax.servlet.Servlet;
  +import javax.servlet.ServletRequest;
  +import javax.servlet.ServletResponse;
   import org.apache.catalina.InstanceEvent;
   import org.apache.catalina.InstanceListener;
   import org.apache.catalina.Wrapper;
  @@ -77,7 +79,7 @@
    * registered InstanceListeners.
    *
    * @author Craig R. McClanahan
  - * @version $Id: InstanceSupport.java,v 1.3 2001/07/22 20:25:13 pier Exp $
  + * @version $Id: InstanceSupport.java,v 1.4 2001/07/30 20:35:49 craigmcc Exp $
    */
   
   public final class InstanceSupport {
  @@ -181,6 +183,35 @@
        * this notification synchronously using the calling thread.
        *
        * @param type Event type
  +     * @param filter The relevant Filter for this event
  +     * @param request The servlet request we are processing
  +     * @param response The servlet response we are processing
  +     */
  +    public void fireInstanceEvent(String type, Filter filter,
  +                                  ServletRequest request,
  +                                  ServletResponse response) {
  +
  +        if (listeners.length == 0)
  +            return;
  +
  +        InstanceEvent event = new InstanceEvent(wrapper, filter, type,
  +                                                request, response);
  +        InstanceListener interested[] = null;
  +        synchronized (listeners) {
  +            interested = (InstanceListener[]) listeners.clone();
  +        }
  +        for (int i = 0; i < interested.length; i++)
  +            interested[i].instanceEvent(event);
  +
  +    }
  +
  +
  +    /**
  +     * Notify all lifecycle event listeners that a particular event has
  +     * occurred for this Container.  The default implementation performs
  +     * this notification synchronously using the calling thread.
  +     *
  +     * @param type Event type
        * @param servlet The relevant Servlet for this event
        */
       public void fireInstanceEvent(String type, Servlet servlet) {
  @@ -189,6 +220,35 @@
               return;
   
           InstanceEvent event = new InstanceEvent(wrapper, servlet, type);
  +        InstanceListener interested[] = null;
  +        synchronized (listeners) {
  +            interested = (InstanceListener[]) listeners.clone();
  +        }
  +        for (int i = 0; i < interested.length; i++)
  +            interested[i].instanceEvent(event);
  +
  +    }
  +
  +
  +    /**
  +     * Notify all lifecycle event listeners that a particular event has
  +     * occurred for this Container.  The default implementation performs
  +     * this notification synchronously using the calling thread.
  +     *
  +     * @param type Event type
  +     * @param servlet The relevant Servlet for this event
  +     * @param request The servlet request we are processing
  +     * @param response The servlet response we are processing
  +     */
  +    public void fireInstanceEvent(String type, Servlet servlet,
  +                                  ServletRequest request,
  +                                  ServletResponse response) {
  +
  +        if (listeners.length == 0)
  +            return;
  +
  +        InstanceEvent event = new InstanceEvent(wrapper, servlet, type,
  +                                                request, response);
           InstanceListener interested[] = null;
           synchronized (listeners) {
               interested = (InstanceListener[]) listeners.clone();