Author: kkolinko
Date: Wed Nov 16 07:49:06 2011
New Revision: 1202565

URL: http://svn.apache.org/viewvc?rev=1202565&view=rev
Log:
Add "denyStatus" attribute to RequestFilterValve, RequestFilter.
Add overridable denyRequest() method to RequestFilterValve.
The denyStatus attribute is used to change HTTP status code that is used when 
rejecting denied request.
E.g. to be 404 instead of default 403.

Modified:
    tomcat/trunk/java/org/apache/catalina/filters/RequestFilter.java
    tomcat/trunk/java/org/apache/catalina/valves/RequestFilterValve.java
    tomcat/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml
    tomcat/trunk/webapps/docs/config/filter.xml
    tomcat/trunk/webapps/docs/config/valve.xml

Modified: tomcat/trunk/java/org/apache/catalina/filters/RequestFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/filters/RequestFilter.java?rev=1202565&r1=1202564&r2=1202565&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/filters/RequestFilter.java (original)
+++ tomcat/trunk/java/org/apache/catalina/filters/RequestFilter.java Wed Nov 16 
07:49:06 2011
@@ -71,6 +71,12 @@ public abstract class RequestFilter exte
     protected Pattern deny = null;
 
     /**
+     * The HTTP response status code that is used when rejecting denied
+     * request. It is 403 by default, but may be changed to be 404.
+     */
+    protected int denyStatus = HttpServletResponse.SC_FORBIDDEN;
+
+    /**
      * mime type -- "text/plain"
      */
     private static final String PLAIN_TEXT_MIME_TYPE = "text/plain";
@@ -133,6 +139,22 @@ public abstract class RequestFilter exte
     }
 
 
+    /**
+     * Return response status code that is used to reject denied request.
+     */
+    public int getDenyStatus() {
+        return denyStatus;
+    }
+
+
+    /**
+     * Set response status code that is used to reject denied request.
+     */
+    public void setDenyStatus(int denyStatus) {
+        this.denyStatus = denyStatus;
+    }
+
+
     // --------------------------------------------------------- Public Methods
 
 
@@ -183,8 +205,7 @@ public abstract class RequestFilter exte
             chain.doFilter(request, response);
         } else {
             if (response instanceof HttpServletResponse) {
-                ((HttpServletResponse) response)
-                        .sendError(HttpServletResponse.SC_FORBIDDEN);
+                ((HttpServletResponse) response).sendError(denyStatus);
             } else {
                 sendErrorWhenNotHttp(response);
             }
@@ -209,7 +230,7 @@ public abstract class RequestFilter exte
         if (isAllowed(property)) {
             chain.doFilterEvent(event);
         } else {
-            response.sendError(HttpServletResponse.SC_FORBIDDEN);
+            response.sendError(denyStatus);
             event.close();
         }
     }

Modified: tomcat/trunk/java/org/apache/catalina/valves/RequestFilterValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/RequestFilterValve.java?rev=1202565&r1=1202564&r2=1202565&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/RequestFilterValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/RequestFilterValve.java Wed 
Nov 16 07:49:06 2011
@@ -112,6 +112,12 @@ public abstract class RequestFilterValve
     protected volatile boolean denyValid = true;
 
 
+    /**
+     * The HTTP response status code that is used when rejecting denied
+     * request. It is 403 by default, but may be changed to be 404.
+     */
+    protected int denyStatus = HttpServletResponse.SC_FORBIDDEN;
+
     // ------------------------------------------------------------- Properties
 
 
@@ -201,6 +207,21 @@ public abstract class RequestFilterValve
     }
 
 
+    /**
+     * Return response status code that is used to reject denied request.
+     */
+    public int getDenyStatus() {
+        return denyStatus;
+    }
+
+
+    /**
+     * Set response status code that is used to reject denied request.
+     */
+    public void setDenyStatus(int denyStatus) {
+        this.denyStatus = denyStatus;
+    }
+
     // --------------------------------------------------------- Public Methods
 
     /**
@@ -263,10 +284,25 @@ public abstract class RequestFilterValve
         }
 
         // Deny this request
-        response.sendError(HttpServletResponse.SC_FORBIDDEN);
+        denyRequest(request, response);
 
     }
 
+
+    /**
+     * Reject the request that was denied by this valve.
+     *
+     * @param request The servlet request to be processed
+     * @param response The servlet response to be processed
+     * @exception IOException if an input/output error occurs
+     * @exception ServletException if a servlet error occurs
+     */
+    protected void denyRequest(Request request, Response response)
+            throws IOException, ServletException {
+        response.sendError(denyStatus);
+    }
+
+
     /**
      * Perform the test implemented by this Valve, matching against the
      * specified request property value. This method is public so that it can 
be

Modified: tomcat/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml?rev=1202565&r1=1202564&r2=1202565&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml 
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/mbeans-descriptors.xml Wed Nov 
16 07:49:06 2011
@@ -336,6 +336,10 @@
                description="The deny expression"
                type="java.lang.String"/>
 
+    <attribute name="denyStatus"
+               description="HTTP response status that is used when rejecting 
denied request"
+               type="int"/>
+
     <attribute name="denyValid"
                description="Becomes false if assigned value of deny expression 
is not syntactically correct"
                is="true"
@@ -387,6 +391,10 @@
                description="The deny expression"
                type="java.lang.String"/>
 
+    <attribute name="denyStatus"
+               description="HTTP response status code that is used when 
rejecting denied request"
+               type="int"/>
+
     <attribute name="denyValid"
                description="Becomes false if assigned value of deny expression 
is not syntactically correct"
                is="true"

Modified: tomcat/trunk/webapps/docs/config/filter.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/filter.xml?rev=1202565&r1=1202564&r2=1202565&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/filter.xml (original)
+++ tomcat/trunk/webapps/docs/config/filter.xml Wed Nov 16 07:49:06 2011
@@ -577,6 +577,12 @@ FINE: Request "/docs/config/manager.html
         governed solely by the <code>accept</code> attribute.</p>
       </attribute>
 
+      <attribute name="denyStatus" required="false">
+        <p>HTTP response status code that is used when rejecting denied
+        request. The default value is <code>403</code>. For example,
+        it can be set to the value <code>404</code>.</p>
+      </attribute>
+
     </attributes>
 
   </subsection>
@@ -651,6 +657,12 @@ FINE: Request "/docs/config/manager.html
         governed solely by the <code>accept</code> attribute.</p>
       </attribute>
 
+      <attribute name="denyStatus" required="false">
+        <p>HTTP response status code that is used when rejecting denied
+        request. The default value is <code>403</code>. For example,
+        it can be set to the value <code>404</code>.</p>
+      </attribute>
+
     </attributes>
 
   </subsection>

Modified: tomcat/trunk/webapps/docs/config/valve.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/valve.xml?rev=1202565&r1=1202564&r2=1202565&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/valve.xml (original)
+++ tomcat/trunk/webapps/docs/config/valve.xml Wed Nov 16 07:49:06 2011
@@ -550,6 +550,12 @@
         governed solely by the <code>accept</code> attribute.</p>
       </attribute>
 
+      <attribute name="denyStatus" required="false">
+        <p>HTTP response status code that is used when rejecting denied
+        request. The default value is <code>403</code>. For example,
+        it can be set to the value <code>404</code>.</p>
+      </attribute>
+
     </attributes>
 
   </subsection>
@@ -615,6 +621,12 @@
         governed solely by the <code>accept</code> attribute.</p>
       </attribute>
 
+      <attribute name="denyStatus" required="false">
+        <p>HTTP response status code that is used when rejecting denied
+        request. The default value is <code>403</code>. For example,
+        it can be set to the value <code>404</code>.</p>
+      </attribute>
+
     </attributes>
 
   </subsection>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to