You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/11/03 22:10:04 UTC

svn commit: r1197310 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/valves/RequestFilterValve.java

Author: markt
Date: Thu Nov  3 21:10:04 2011
New Revision: 1197310

URL: http://svn.apache.org/viewvc?rev=1197310&view=rev
Log:
Ensure that subsequent attempts to start the Valves will not succeed until valid configuration is provided.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Nov  3 21:10:04 2011
@@ -1 +1 @@
-/tomcat/trunk:1156115,1156171,1156276,1156304,1156519,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1158426,1160347,1160592,1160611,1160619,1160626,1160639,1160652,1160720-1160721,1160772,1160774,1160776,1161303,1161310,1161322,1161339,1161486,1161540,1161549,1161584,1162082,1162149,1162169,1162721,1162769,1162836,1162932,1163630,1164419,1164438,1164469,1164480,1164567,1165234,1165247-1165248,1165253,1165273,1165282,1165309,1165331,1165338,1165347,1165360-1165361,1165367-1165368,1165602,1165608,1165677,1165693,1165721,1165723,1165728,1165730,1165738,1165746,1165765,1165777,1165918,1165921,1166077,1166150-1166151,1166290,1166366,1166620,1166686,1166693,1166752,1166757,1167368,1167394,1169447,1170647,1171692,1172233-1172234,1172236,1172269,1172278,1172282,1172556,1172610,1172664,1172689,1172711,1173020-1173021,1173082,1173088,1173090,1173096
 ,1173241,1173256,1173288,1173333,1173342,1173461,1173614,1173630,1173659,1173722,1174061,1174239,1174322,1174325,1174329-1174330,1174337-1174339,1174343,1174353,1174799,1174882,1174884,1174983,1175155,1175158,1175167,1175182,1175190,1175201,1175272,1175275,1175283,1175582,1175589-1175590,1175594,1175602,1175613,1175633,1175690,1175713,1175798,1175889,1175896,1175907,1176584,1176590,1176799,1177050,1177060,1177125,1177152,1177160,1177245,1177850,1177862,1177978,1178209,1178228,1178233,1178449,1178542,1178681,1178684,1178721,1179268,1179274,1180261,1180865,1180891,1180894,1180907,1181028,1181123,1181125,1181136,1181291,1181743,1182796,1183078,1183105,1183142,1183328,1183339-1183340,1183492-1183494,1183605,1184917,1184919,1185018,1185020,1185200,1185588,1185626,1185756,1185758,1186011,1186042-1186045,1186104,1186123,1186137,1186153,1186254,1186257,1186377-1186379,1186479-1186480,1186712,1186743,1186750,1186763,1186890-1186892,1186894,1186949,1187018,1187027-1187028,1187381,1187
 755,1187775,1187827,1188301,1188303-1188305,1188399,1188822,1188930-1188931,1189116,1189129,1189183,1189240,1189256,1189386,1189413-1189414,1189477,1189685,1189805,1189857,1189864,1189882,1190034,1190185,1190279,1190339,1190371,1190388-1190389,1190474,1190481,1194915,1195222-1195223,1195531,1195899,1195905,1195943,1195949,1195953,1195955,1195965,1195968,1196175,1196212,1196223,1196304-1196305,1196735,1196825,1196827,1197299
+/tomcat/trunk:1156115,1156171,1156276,1156304,1156519,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1158426,1160347,1160592,1160611,1160619,1160626,1160639,1160652,1160720-1160721,1160772,1160774,1160776,1161303,1161310,1161322,1161339,1161486,1161540,1161549,1161584,1162082,1162149,1162169,1162721,1162769,1162836,1162932,1163630,1164419,1164438,1164469,1164480,1164567,1165234,1165247-1165248,1165253,1165273,1165282,1165309,1165331,1165338,1165347,1165360-1165361,1165367-1165368,1165602,1165608,1165677,1165693,1165721,1165723,1165728,1165730,1165738,1165746,1165765,1165777,1165918,1165921,1166077,1166150-1166151,1166290,1166366,1166620,1166686,1166693,1166752,1166757,1167368,1167394,1169447,1170647,1171692,1172233-1172234,1172236,1172269,1172278,1172282,1172556,1172610,1172664,1172689,1172711,1173020-1173021,1173082,1173088,1173090,1173096
 ,1173241,1173256,1173288,1173333,1173342,1173461,1173614,1173630,1173659,1173722,1174061,1174239,1174322,1174325,1174329-1174330,1174337-1174339,1174343,1174353,1174799,1174882,1174884,1174983,1175155,1175158,1175167,1175182,1175190,1175201,1175272,1175275,1175283,1175582,1175589-1175590,1175594,1175602,1175613,1175633,1175690,1175713,1175798,1175889,1175896,1175907,1176584,1176590,1176799,1177050,1177060,1177125,1177152,1177160,1177245,1177850,1177862,1177978,1178209,1178228,1178233,1178449,1178542,1178681,1178684,1178721,1179268,1179274,1180261,1180865,1180891,1180894,1180907,1181028,1181123,1181125,1181136,1181291,1181743,1182796,1183078,1183105,1183142,1183328,1183339-1183340,1183492-1183494,1183605,1184917,1184919,1185018,1185020,1185200,1185588,1185626,1185756,1185758,1186011,1186042-1186045,1186104,1186123,1186137,1186153,1186254,1186257,1186377-1186379,1186479-1186480,1186712,1186743,1186750,1186763,1186890-1186892,1186894,1186949,1187018,1187027-1187028,1187381,1187
 755,1187775,1187827,1188301,1188303-1188305,1188399,1188822,1188930-1188931,1189116,1189129,1189183,1189240,1189256,1189386,1189413-1189414,1189477,1189685,1189805,1189857,1189864,1189882,1190034,1190185,1190279,1190339,1190371,1190388-1190389,1190474,1190481,1194915,1195222-1195223,1195531,1195899,1195905,1195943,1195949,1195953,1195955,1195965,1195968,1196175,1196212,1196223,1196304-1196305,1196735,1196825,1196827,1197299-1197300

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java?rev=1197310&r1=1197309&r2=1197310&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java Thu Nov  3 21:10:04 2011
@@ -83,6 +83,14 @@ public abstract class RequestFilterValve
      */
     protected volatile Pattern allow = null;
 
+
+    /**
+     * The current allow configuration value that may or may not compile into a
+     * valid {@link Pattern}.
+     */
+    protected volatile String allowValue = null;
+
+
     /**
      * Helper variable to catch configuration errors.
      * It is <code>true</code> by default, but becomes <code>false</code>
@@ -97,6 +105,14 @@ public abstract class RequestFilterValve
      */
     protected volatile Pattern deny = null;
 
+
+    /**
+     * The current deny configuration value that may or may not compile into a
+     * valid {@link Pattern}.
+     */
+    protected volatile String denyValue = null;
+
+
     /**
      * Helper variable to catch configuration errors.
      * It is <code>true</code> by default, but becomes <code>false</code>
@@ -114,12 +130,7 @@ public abstract class RequestFilterValve
      * Valve, if any; otherwise, return <code>null</code>.
      */
     public String getAllow() {
-        // Use local copies for thread safety
-        Pattern allow = this.allow;
-        if (allow == null) {
-            return null;
-        }
-        return allow.toString();
+        return allowValue;
     }
 
 
@@ -132,10 +143,12 @@ public abstract class RequestFilterValve
     public void setAllow(String allow) {
         if (allow == null || allow.length() == 0) {
             this.allow = null;
+            allowValue = null;
             allowValid = true;
         } else {
             boolean success = false;
             try {
+                allowValue = allow;
                 this.allow = Pattern.compile(allow);
                 success = true;
             } finally {
@@ -150,12 +163,7 @@ public abstract class RequestFilterValve
      * Valve, if any; otherwise, return <code>null</code>.
      */
     public String getDeny() {
-        // Use local copies for thread safety
-        Pattern deny = this.deny;
-        if (deny == null) {
-            return null;
-        }
-        return deny.toString();
+        return denyValue;
     }
 
 
@@ -168,10 +176,12 @@ public abstract class RequestFilterValve
     public void setDeny(String deny) {
         if (deny == null || deny.length() == 0) {
             this.deny = null;
+            denyValue = null;
             denyValid = true;
         } else {
             boolean success = false;
             try {
+                denyValue = deny;
                 this.deny = Pattern.compile(deny);
                 success = true;
             } finally {
@@ -225,6 +235,16 @@ public abstract class RequestFilterValve
     }
 
 
+    @Override
+    protected synchronized void startInternal() throws LifecycleException {
+        if (!allowValid || !denyValid) {
+            throw new LifecycleException(
+                    sm.getString("requestFilterValve.configInvalid"));
+        }
+        super.startInternal();
+    }
+
+
     /**
      * Perform the filtering that has been configured for this Valve, matching
      * against the specified request property.



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


Re: svn commit: r1197310 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/valves/RequestFilterValve.java

Posted by Konstantin Kolinko <kn...@gmail.com>.
2011/11/4  <ma...@apache.org>:
> Author: markt
> Date: Thu Nov  3 21:10:04 2011
> New Revision: 1197310
>
> URL: http://svn.apache.org/viewvc?rev=1197310&view=rev
> Log:
> Ensure that subsequent attempts to start the Valves will not succeed until valid configuration is provided.
>
> Modified:
>    tomcat/tc7.0.x/trunk/   (props changed)
>    tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java
>
> Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java
> URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java?rev=1197310&r1=1197309&r2=1197310&view=diff
> ==============================================================================
> --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java (original)
> +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RequestFilterValve.java Thu Nov  3 21:10:04 2011
> @@ -83,6 +83,14 @@ public abstract class RequestFilterValve
>      */
>     protected volatile Pattern allow = null;
>
> +
> +    /**
> +     * The current allow configuration value that may or may not compile into a
> +     * valid {@link Pattern}.
> +     */
> +    protected volatile String allowValue = null;
> +
> +
>     /**
>      * Helper variable to catch configuration errors.
>      * It is <code>true</code> by default, but becomes <code>false</code>
> @@ -97,6 +105,14 @@ public abstract class RequestFilterValve
>      */
>     protected volatile Pattern deny = null;
>
> +
> +    /**
> +     * The current deny configuration value that may or may not compile into a
> +     * valid {@link Pattern}.
> +     */
> +    protected volatile String denyValue = null;
> +
> +
>     /**
>      * Helper variable to catch configuration errors.
>      * It is <code>true</code> by default, but becomes <code>false</code>
> @@ -114,12 +130,7 @@ public abstract class RequestFilterValve
>      * Valve, if any; otherwise, return <code>null</code>.
>      */
>     public String getAllow() {
> -        // Use local copies for thread safety
> -        Pattern allow = this.allow;
> -        if (allow == null) {
> -            return null;
> -        }
> -        return allow.toString();
> +        return allowValue;
>     }
>
>
> @@ -132,10 +143,12 @@ public abstract class RequestFilterValve
>     public void setAllow(String allow) {
>         if (allow == null || allow.length() == 0) {
>             this.allow = null;
> +            allowValue = null;
>             allowValid = true;
>         } else {
>             boolean success = false;
>             try {
> +                allowValue = allow;
>                 this.allow = Pattern.compile(allow);
>                 success = true;
>             } finally {
> @@ -150,12 +163,7 @@ public abstract class RequestFilterValve
>      * Valve, if any; otherwise, return <code>null</code>.
>      */
>     public String getDeny() {
> -        // Use local copies for thread safety
> -        Pattern deny = this.deny;
> -        if (deny == null) {
> -            return null;
> -        }
> -        return deny.toString();
> +        return denyValue;
>     }
>
>
> @@ -168,10 +176,12 @@ public abstract class RequestFilterValve
>     public void setDeny(String deny) {
>         if (deny == null || deny.length() == 0) {
>             this.deny = null;
> +            denyValue = null;
>             denyValid = true;
>         } else {
>             boolean success = false;
>             try {
> +                denyValue = deny;
>                 this.deny = Pattern.compile(deny);
>                 success = true;
>             } finally {
> @@ -225,6 +235,16 @@ public abstract class RequestFilterValve
>     }
>
>
> +    @Override
> +    protected synchronized void startInternal() throws LifecycleException {
> +        if (!allowValid || !denyValid) {
> +            throw new LifecycleException(
> +                    sm.getString("requestFilterValve.configInvalid"));
> +        }
> +        super.startInternal();
> +    }
> +
> +
>     /**
>      * Perform the filtering that has been configured for this Valve, matching
>      * against the specified request property.

Good.

The 5.5 and 6.0 patches should have this feature already, because they
do not have separate init method and do it in start() instead.

The only difference is that you assign the string values before
calling Pattern.compile(), while in 5.5/6.0 I do assignment only if
compilation is successful.

I think that this your assignment behaviour is better and I could
update the 5.5/6.0 patches to align with it.

Best regards,
Konstantin Kolinko

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