Author: markt
Date: Mon Jan 21 20:28:28 2013
New Revision: 1436593
URL: http://svn.apache.org/viewvc?rev=1436593&view=rev
Log:
Fix some immediate Eclipse/Checkstyle issues
- add missing license header
- remove stray author tag
- remove trailing whitespace
- add @Override
- Java 7 <> operator
Still a few to investigate including the deprecation as I removed the class
level suppression to look at the individual issues more closely
Modified:
tomcat/trunk/java/org/apache/catalina/valves/rewrite/Resolver.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/ResolverImpl.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteCond.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteMap.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteRule.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java
tomcat/trunk/java/org/apache/catalina/valves/rewrite/mbeans-descriptors.xml
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/Resolver.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/Resolver.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/Resolver.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/Resolver.java Mon Jan
21 20:28:28 2013
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,21 +18,19 @@
package org.apache.catalina.valves.rewrite;
/**
- * Resolver abstract class.
- * @author Remy Maucherat
+ * Resolver abstract class.
*/
public abstract class Resolver {
public abstract String resolve(String key);
-
+
public String resolveEnv(String key) {
return System.getProperty(key);
}
-
+
public abstract String resolveSsl(String key);
-
+
public abstract String resolveHttp(String key);
public abstract boolean resolveResource(int type, String name);
-
}
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/ResolverImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/ResolverImpl.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/ResolverImpl.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/ResolverImpl.java Mon
Jan 21 20:28:28 2013
@@ -5,16 +5,15 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.catalina.valves.rewrite;
import java.util.Calendar;
@@ -25,21 +24,21 @@ import org.apache.catalina.connector.Req
import org.apache.tomcat.util.http.FastHttpDateFormat;
-@SuppressWarnings("deprecation")
public class ResolverImpl extends Resolver {
protected Request request = null;
-
+
public ResolverImpl(Request request) {
this.request = request;
}
-
+
/**
* The following are not implemented:
* - SERVER_ADMIN
* - API_VERSION
* - IS_SUBREQ
*/
+ @Override
public String resolve(String key) {
if (key.equals("HTTP_USER_AGENT")) {
return request.getHeader("user-agent");
@@ -98,7 +97,7 @@ public class ResolverImpl extends Resolv
} else if (key.equals("SERVER_SOFTWARE")) {
return "tomcat";
} else if (key.equals("THE_REQUEST")) {
- return request.getMethod() + " " + request.getRequestURI()
+ return request.getMethod() + " " + request.getRequestURI()
+ " " + request.getProtocol();
} else if (key.equals("REQUEST_URI")) {
return request.getRequestURI();
@@ -126,20 +125,24 @@ public class ResolverImpl extends Resolv
return null;
}
+ @Override
public String resolveEnv(String key) {
Object result = request.getAttribute(key);
return (result != null) ? result.toString() : System.getProperty(key);
}
-
+
+ @Override
public String resolveSsl(String key) {
// FIXME: Implement SSL environment variables
return null;
}
+ @Override
public String resolveHttp(String key) {
return request.getHeader(key);
}
-
+
+ @Override
public boolean resolveResource(int type, String name) {
WebResourceRoot resources = request.getContext().getResources();
WebResource resource = resources.getResource(name);
@@ -166,5 +169,4 @@ public class ResolverImpl extends Resolv
return value;
}
}
-
}
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteCond.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteCond.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteCond.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteCond.java Mon
Jan 21 20:28:28 2013
@@ -5,16 +5,15 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.catalina.valves.rewrite;
import java.util.Locale;
@@ -27,10 +26,12 @@ public class RewriteCond {
public abstract class Condition {
public abstract boolean evaluate(String value, Resolver resolver);
}
-
+
public class PatternCondition extends Condition {
public Pattern pattern;
public Matcher matcher = null;
+
+ @Override
public boolean evaluate(String value, Resolver resolver) {
Matcher m = pattern.matcher(value);
if (m.matches()) {
@@ -41,7 +42,7 @@ public class RewriteCond {
}
}
}
-
+
public class LexicalCondition extends Condition {
/**
* -1: <
@@ -50,6 +51,8 @@ public class RewriteCond {
*/
public int type = 0;
public String condition;
+
+ @Override
public boolean evaluate(String value, Resolver resolver) {
int result = value.compareTo(condition);
switch (type) {
@@ -62,10 +65,10 @@ public class RewriteCond {
default:
return false;
}
-
+
}
}
-
+
public class ResourceCondition extends Condition {
/**
* 0: -d (is directory ?)
@@ -73,14 +76,16 @@ public class RewriteCond {
* 2: -s (is regular file with size ?)
*/
public int type = 0;
+
+ @Override
public boolean evaluate(String value, Resolver resolver) {
return resolver.resolveResource(type, value);
}
}
-
+
protected String testString = null;
protected String condPattern = null;
-
+
public String getCondPattern() {
return condPattern;
}
@@ -135,38 +140,39 @@ public class RewriteCond {
condition.pattern = Pattern.compile(condPattern, flags);
}
}
-
+
public Matcher getMatcher() {
Object condition = this.condition.get();
if (condition instanceof PatternCondition) {
- return ((PatternCondition) condition).matcher;
+ return ((PatternCondition) condition).matcher;
}
return null;
}
-
+
/**
* String representation.
*/
+ @Override
public String toString() {
// FIXME: Add flags if possible
return "RewriteCond " + testString + " " + condPattern;
}
-
-
+
+
protected boolean positive = true;
-
+
protected Substitution test = null;
- protected ThreadLocal<Condition> condition = new ThreadLocal<Condition>();
-
+ protected ThreadLocal<Condition> condition = new ThreadLocal<>();
+
/**
- * This makes the test case-insensitive, i.e., there is no difference
between
- * 'A-Z' and 'a-z' both in the expanded TestString and the CondPattern.
This
- * flag is effective only for comparisons between TestString and
CondPattern.
+ * This makes the test case-insensitive, i.e., there is no difference
between
+ * 'A-Z' and 'a-z' both in the expanded TestString and the CondPattern.
This
+ * flag is effective only for comparisons between TestString and
CondPattern.
* It has no effect on filesystem and subrequest checks.
*/
public boolean nocase = false;
-
+
/**
* Use this to combine rule conditions with a local OR instead of the
implicit AND.
*/
@@ -174,10 +180,9 @@ public class RewriteCond {
/**
* Evaluate the condition based on the context
- *
+ *
* @param rule corresponding matched rule
* @param cond last matched condition
- * @return
*/
public boolean evaluate(Matcher rule, Matcher cond, Resolver resolver) {
String value = test.evaluate(rule, cond, resolver);
@@ -230,7 +235,7 @@ public class RewriteCond {
return !condition.evaluate(value, resolver);
}
}
-
+
public boolean isNocase() {
return nocase;
}
@@ -254,5 +259,4 @@ public class RewriteCond {
public void setPositive(boolean positive) {
this.positive = positive;
}
-
}
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteMap.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteMap.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteMap.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteMap.java Mon
Jan 21 20:28:28 2013
@@ -5,22 +5,20 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.catalina.valves.rewrite;
public interface RewriteMap {
public String setParameters(String params);
-
+
public String lookup(String key);
-
}
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteRule.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteRule.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteRule.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteRule.java Mon
Jan 21 20:28:28 2013
@@ -5,16 +5,15 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.catalina.valves.rewrite;
import java.util.ArrayList;
@@ -23,15 +22,15 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RewriteRule {
-
+
protected RewriteCond[] conditions = new RewriteCond[0];
-
- protected ThreadLocal<Pattern> pattern = new ThreadLocal<Pattern>();
+
+ protected ThreadLocal<Pattern> pattern = new ThreadLocal<>();
protected Substitution substitution = null;
-
+
protected String patternString = null;
protected String substitutionString = null;
-
+
public void parse(Map<String, RewriteMap> maps) {
// Parse the substitution
if (!"-".equals(substitutionString)) {
@@ -65,7 +64,7 @@ public class RewriteRule {
cookieSubstitution.parse(maps);
}
}
-
+
public void addCondition(RewriteCond condition) {
RewriteCond[] conditions = new RewriteCond[this.conditions.length + 1];
for (int i = 0; i < this.conditions.length; i++) {
@@ -74,10 +73,10 @@ public class RewriteRule {
conditions[this.conditions.length] = condition;
this.conditions = conditions;
}
-
+
/**
* Evaluate the rule based on the context
- *
+ *
* @return null if no rewrite took place
*/
public CharSequence evaluate(CharSequence url, Resolver resolver) {
@@ -140,32 +139,33 @@ public class RewriteRule {
}
}
-
+
/**
* String representation.
*/
+ @Override
public String toString() {
// FIXME: Add flags if possible
return "RewriteRule " + patternString + " " + substitutionString;
}
-
-
+
+
/**
- * This flag chains the current rule with the next rule (which itself
- * can be chained with the following rule, etc.). This has the following
- * effect: if a rule matches, then processing continues as usual, i.e.,
- * the flag has no effect. If the rule does not match, then all following
- * chained rules are skipped. For instance, use it to remove the ``.www''
- * part inside a per-directory rule set when you let an external redirect
+ * This flag chains the current rule with the next rule (which itself
+ * can be chained with the following rule, etc.). This has the following
+ * effect: if a rule matches, then processing continues as usual, i.e.,
+ * the flag has no effect. If the rule does not match, then all following
+ * chained rules are skipped. For instance, use it to remove the ``.www''
+ * part inside a per-directory rule set when you let an external redirect
* happen (where the ``.www'' part should not to occur!).
*/
protected boolean chain = false;
-
+
/**
- * This sets a cookie on the client's browser. The cookie's name is
- * specified by NAME and the value is VAL. The domain field is the domain
- * of the cookie, such as '.apache.org',the optional lifetime
- * is the lifetime of the cookie in minutes, and the optional path is the
+ * This sets a cookie on the client's browser. The cookie's name is
+ * specified by NAME and the value is VAL. The domain field is the domain
+ * of the cookie, such as '.apache.org',the optional lifetime
+ * is the lifetime of the cookie in minutes, and the optional path is the
* path of the cookie
*/
protected boolean cookie = false;
@@ -177,100 +177,100 @@ public class RewriteRule {
protected boolean cookieSecure = false;
protected boolean cookieHttpOnly = false;
protected Substitution cookieSubstitution = null;
- protected ThreadLocal<String> cookieResult = new ThreadLocal<String>();
-
+ protected ThreadLocal<String> cookieResult = new ThreadLocal<>();
+
/**
- * This forces a request attribute named VAR to be set to the value VAL,
- * where VAL can contain regexp back references $N and %N which will be
+ * This forces a request attribute named VAR to be set to the value VAL,
+ * where VAL can contain regexp back references $N and %N which will be
* expanded. Multiple env flags are allowed.
*/
protected boolean env = false;
- protected ArrayList<String> envName = new ArrayList<String>();
- protected ArrayList<String> envValue = new ArrayList<String>();
- protected ArrayList<Substitution> envSubstitution = new
ArrayList<Substitution>();
- protected ArrayList<ThreadLocal<String>> envResult = new
ArrayList<ThreadLocal<String>>();
-
+ protected ArrayList<String> envName = new ArrayList<>();
+ protected ArrayList<String> envValue = new ArrayList<>();
+ protected ArrayList<Substitution> envSubstitution = new ArrayList<>();
+ protected ArrayList<ThreadLocal<String>> envResult = new ArrayList<>();
+
/**
- * This forces the current URL to be forbidden, i.e., it immediately
sends
- * back a HTTP response of 403 (FORBIDDEN). Use this flag in conjunction
+ * This forces the current URL to be forbidden, i.e., it immediately sends
+ * back a HTTP response of 403 (FORBIDDEN). Use this flag in conjunction
* with appropriate RewriteConds to conditionally block some URLs.
*/
protected boolean forbidden = false;
-
+
/**
- * This forces the current URL to be gone, i.e., it immediately sends
- * back a HTTP response of 410 (GONE). Use this flag to mark pages which
+ * This forces the current URL to be gone, i.e., it immediately sends
+ * back a HTTP response of 410 (GONE). Use this flag to mark pages which
* no longer exist as gone.
*/
protected boolean gone = false;
-
+
/**
* Host. This means this rule and its associated conditions will apply to
* host, allowing host rewriting (ex: redirecting internally *.foo.com to
* bar.foo.com).
*/
- protected boolean host = false;
-
+ protected boolean host = false;
+
/**
- * Stop the rewriting process here and don't apply any more rewriting
- * rules. This corresponds to the Perl last command or the break command
- * from the C language. Use this flag to prevent the currently rewritten
- * URL from being rewritten further by following rules. For example, use
+ * Stop the rewriting process here and don't apply any more rewriting
+ * rules. This corresponds to the Perl last command or the break command
+ * from the C language. Use this flag to prevent the currently rewritten
+ * URL from being rewritten further by following rules. For example, use
* it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.
*/
protected boolean last = false;
-
+
/**
- * Re-run the rewriting process (starting again with the first rewriting
- * rule). Here the URL to match is again not the original URL but the URL
- * from the last rewriting rule. This corresponds to the Perl next
- * command or the continue command from the C language. Use this flag to
- * restart the rewriting process, i.e., to immediately go to the top of
+ * Re-run the rewriting process (starting again with the first rewriting
+ * rule). Here the URL to match is again not the original URL but the URL
+ * from the last rewriting rule. This corresponds to the Perl next
+ * command or the continue command from the C language. Use this flag to
+ * restart the rewriting process, i.e., to immediately go to the top of
* the loop. But be careful not to create an infinite loop!
*/
protected boolean next = false;
-
+
/**
- * This makes the Pattern case-insensitive, i.e., there is no difference
- * between 'A-Z' and 'a-z' when Pattern is matched against the current
+ * This makes the Pattern case-insensitive, i.e., there is no difference
+ * between 'A-Z' and 'a-z' when Pattern is matched against the current
* URL.
*/
protected boolean nocase = false;
-
+
/**
- * This flag keeps mod_rewrite from applying the usual URI escaping rules
- * to the result of a rewrite. Ordinarily, special characters (such as
- * '%', '$', ';', and so on) will be escaped into their hexcode
- * equivalents ('%25', '%24', and '%3B', respectively); this flag
- * prevents this from being done. This allows percent symbols to appear
- * in the output, as in
- * RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
+ * This flag keeps mod_rewrite from applying the usual URI escaping rules
+ * to the result of a rewrite. Ordinarily, special characters (such as
+ * '%', '$', ';', and so on) will be escaped into their hexcode
+ * equivalents ('%25', '%24', and '%3B', respectively); this flag
+ * prevents this from being done. This allows percent symbols to appear
+ * in the output, as in
+ * RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
* which would turn '/foo/zed' into a safe request for
'/bar?arg=P1=zed'.
*/
protected boolean noescape = false;
-
+
/**
- * This flag forces the rewriting engine to skip a rewriting rule if the
- * current request is an internal sub-request. For instance, sub-requests
- * occur internally in Apache when mod_include tries to find out
- * information about possible directory default files (index.xxx). On
- * sub-requests it is not always useful and even sometimes causes a
- * failure to if the complete set of rules are applied. Use this flag to
- * exclude some rules. Use the following rule for your decision: whenever
- * you prefix some URLs with CGI-scripts to force them to be processed by
- * the CGI-script, the chance is high that you will run into problems (or
+ * This flag forces the rewriting engine to skip a rewriting rule if the
+ * current request is an internal sub-request. For instance, sub-requests
+ * occur internally in Apache when mod_include tries to find out
+ * information about possible directory default files (index.xxx). On
+ * sub-requests it is not always useful and even sometimes causes a
+ * failure to if the complete set of rules are applied. Use this flag to
+ * exclude some rules. Use the following rule for your decision: whenever
+ * you prefix some URLs with CGI-scripts to force them to be processed by
+ * the CGI-script, the chance is high that you will run into problems (or
* even overhead) on sub-requests. In these cases, use this flag.
*/
protected boolean nosubreq = false;
-
+
/**
- * This flag forces the substitution part to be internally forced as a
proxy
- * request and immediately (i.e., rewriting rule processing stops here)
put
- * through the proxy module. You have to make sure that the substitution
string
- * is a valid URI (e.g., typically starting with http://hostname) which
can be
- * handled by the Apache proxy module. If not you get an error from the
proxy
- * module. Use this flag to achieve a more powerful implementation of the
- * ProxyPass directive, to map some remote stuff into the namespace of
+ * This flag forces the substitution part to be internally forced as a
proxy
+ * request and immediately (i.e., rewriting rule processing stops here)
put
+ * through the proxy module. You have to make sure that the substitution
string
+ * is a valid URI (e.g., typically starting with http://hostname) which
can be
+ * handled by the Apache proxy module. If not you get an error from the
proxy
+ * module. Use this flag to achieve a more powerful implementation of the
+ * ProxyPass directive, to map some remote stuff into the namespace of
* the local server.
* Note: No proxy
*/
@@ -278,49 +278,49 @@ public class RewriteRule {
/**
* Note: No passthrough
*/
-
+
/**
- * This flag forces the rewriting engine to append a query string part in
- * the substitution string to the existing one instead of replacing it.
- * Use this when you want to add more data to the query string via
+ * This flag forces the rewriting engine to append a query string part in
+ * the substitution string to the existing one instead of replacing it.
+ * Use this when you want to add more data to the query string via
* a rewrite rule.
*/
- protected boolean qsappend = false;
-
+ protected boolean qsappend = false;
+
/**
- * Prefix Substitution with http://thishost[:thisport]/ (which makes the
- * new URL a URI) to force a external redirection. If no code is given
- * a HTTP response of 302 (MOVED TEMPORARILY) is used. If you want to
- * use other response codes in the range 300-400 just specify them as
- * a number or use one of the following symbolic names: temp (default),
- * permanent, seeother. Use it for rules which should canonicalize the
- * URL and give it back to the client, e.g., translate ``/~'' into
``/u/''
- * or always append a slash to /u/user, etc. Note: When you use this
flag,
- * make sure that the substitution field is a valid URL! If not, you are
- * redirecting to an invalid location! And remember that this flag itself
- * only prefixes the URL with http://thishost[:thisport]/, rewriting
- * continues. Usually you also want to stop and do the redirection
- * immediately. To stop the rewriting you also have to provide the
+ * Prefix Substitution with http://thishost[:thisport]/ (which makes the
+ * new URL a URI) to force a external redirection. If no code is given
+ * a HTTP response of 302 (MOVED TEMPORARILY) is used. If you want to
+ * use other response codes in the range 300-400 just specify them as
+ * a number or use one of the following symbolic names: temp (default),
+ * permanent, seeother. Use it for rules which should canonicalize the
+ * URL and give it back to the client, e.g., translate ``/~'' into ``/u/''
+ * or always append a slash to /u/user, etc. Note: When you use this flag,
+ * make sure that the substitution field is a valid URL! If not, you are
+ * redirecting to an invalid location! And remember that this flag itself
+ * only prefixes the URL with http://thishost[:thisport]/, rewriting
+ * continues. Usually you also want to stop and do the redirection
+ * immediately. To stop the rewriting you also have to provide the
* 'L' flag.
*/
protected boolean redirect = false;
protected int redirectCode = 0;
-
+
/**
- * This flag forces the rewriting engine to skip the next num rules in
- * sequence when the current rule matches. Use this to make pseudo
- * if-then-else constructs: The last rule of the then-clause becomes
- * skip=N where N is the number of rules in the else-clause.
+ * This flag forces the rewriting engine to skip the next num rules in
+ * sequence when the current rule matches. Use this to make pseudo
+ * if-then-else constructs: The last rule of the then-clause becomes
+ * skip=N where N is the number of rules in the else-clause.
* (This is not the same as the 'chain|C' flag!)
*/
protected int skip = 0;
-
+
/**
- * Force the MIME-type of the target file to be MIME-type. For instance,
- * this can be used to setup the content-type based on some conditions.
- * For example, the following snippet allows .php files to be displayed
- * by mod_php if they are called with the .phps extension:
- * RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
+ * Force the MIME-type of the target file to be MIME-type. For instance,
+ * this can be used to setup the content-type based on some conditions.
+ * For example, the following snippet allows .php files to be displayed
+ * by mod_php if they are called with the .phps extension:
+ * RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
*/
protected boolean type = false;
protected String typeValue = null;
@@ -529,5 +529,4 @@ public class RewriteRule {
public void setCookieHttpOnly(boolean cookieHttpOnly) {
this.cookieHttpOnly = cookieHttpOnly;
}
-
}
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java Mon
Jan 21 20:28:28 2013
@@ -5,16 +5,15 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.catalina.valves.rewrite;
import java.io.BufferedReader;
@@ -50,27 +49,26 @@ import org.apache.tomcat.util.buf.CharCh
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.net.URL;
-public class RewriteValve extends ValveBase
- implements Lifecycle {
+public class RewriteValve extends ValveBase {
/**
* The lifecycle event support for this component.
*/
protected LifecycleSupport lifecycle = new LifecycleSupport(this);
-
+
/**
* The rewrite rules that the valve will use.
*/
protected RewriteRule[] rules = null;
-
-
+
+
/**
* If rewriting occurs, the whole request will be processed again.
*/
- protected ThreadLocal<Boolean> invoked = new ThreadLocal<Boolean>();
-
-
+ protected ThreadLocal<Boolean> invoked = new ThreadLocal<>();
+
+
/**
* Relative path to the configuration file.
* Note: If the valve's container is a context, this will be relative to
@@ -78,13 +76,13 @@ public class RewriteValve extends ValveB
*/
protected String resourcePath = "rewrite.config";
-
+
/**
* Will be set to true if the valve is associated with a context.
*/
protected boolean context = false;
-
-
+
+
/**
* enabled this component
*/
@@ -93,9 +91,9 @@ public class RewriteValve extends ValveB
/**
* Maps to be used by the rules.
*/
- protected Map<String, RewriteMap> maps = new Hashtable<String,
RewriteMap>();
-
-
+ protected Map<String, RewriteMap> maps = new Hashtable<>();
+
+
public boolean getEnabled() {
return enabled;
}
@@ -104,18 +102,22 @@ public class RewriteValve extends ValveB
this.enabled = enabled;
}
+ @Override
public void addLifecycleListener(LifecycleListener listener) {
lifecycle.addLifecycleListener(listener);
}
+ @Override
public LifecycleListener[] findLifecycleListeners() {
return lifecycle.findLifecycleListeners();
}
+ @Override
public void removeLifecycleListener(LifecycleListener listener) {
lifecycle.removeLifecycleListener(listener);
}
+ @Override
protected synchronized void startInternal() throws LifecycleException {
super.startInternal();
@@ -154,19 +156,19 @@ public class RewriteValve extends ValveB
is = new FileInputStream(file);
}
if ((is == null) && (container.getLogger().isDebugEnabled())) {
- container.getLogger().debug("No configuration resource
found: " + resourceName +
+ container.getLogger().debug("No configuration resource
found: " + resourceName +
" in " + getConfigBase() + " or in the
classloader");
}
} catch (Exception e) {
container.getLogger().error("Error opening configuration", e);
}
}
-
+
if (is == null) {
// Will use management operations to configure the valve
dynamically
return;
}
-
+
BufferedReader reader = new BufferedReader(new InputStreamReader(is,
B2CConverter.UTF_8));
try {
@@ -193,7 +195,7 @@ public class RewriteValve extends ValveB
maps.clear();
parse(new BufferedReader(new StringReader(configuration)));
}
-
+
public String getConfiguration() {
StringBuffer buffer = new StringBuffer();
// FIXME: Output maps if possible
@@ -205,10 +207,10 @@ public class RewriteValve extends ValveB
}
return buffer.toString();
}
-
+
protected void parse(BufferedReader reader) throws LifecycleException {
- ArrayList<RewriteRule> rules = new ArrayList<RewriteRule>();
- ArrayList<RewriteCond> conditions = new ArrayList<RewriteCond>();
+ ArrayList<RewriteRule> rules = new ArrayList<>();
+ ArrayList<RewriteCond> conditions = new ArrayList<>();
while (true) {
try {
String line = reader.readLine();
@@ -230,9 +232,9 @@ public class RewriteValve extends ValveB
for (int i = 0; i < conditions.size(); i++) {
if (container.getLogger().isDebugEnabled()) {
RewriteCond cond = conditions.get(i);
- container.getLogger().debug("Add condition " +
cond.getCondPattern()
- + " test " + cond.getTestString() + " to
rule with pattern "
- + rule.getPatternString() + " and
substitution "
+ container.getLogger().debug("Add condition " +
cond.getCondPattern()
+ + " test " + cond.getTestString() + " to
rule with pattern "
+ + rule.getPatternString() + " and
substitution "
+ rule.getSubstitutionString() +
(cond.isOrnext() ? " [OR]" : "")
+ (cond.isNocase() ? " [NC]" : ""));
}
@@ -254,14 +256,15 @@ public class RewriteValve extends ValveB
container.getLogger().error("Error reading configuration", e);
}
}
- this.rules = (RewriteRule[]) rules.toArray(new RewriteRule[0]);
-
+ this.rules = rules.toArray(new RewriteRule[0]);
+
// Finish parsing the rules
for (int i = 0; i < this.rules.length; i++) {
this.rules[i].parse(maps);
}
}
+ @Override
protected synchronized void stopInternal() throws LifecycleException {
super.stopInternal();
Iterator<RewriteMap> values = maps.values().iterator();
@@ -276,6 +279,7 @@ public class RewriteValve extends ValveB
}
+ @Override
public void invoke(Request request, Response response)
throws IOException, ServletException {
@@ -283,7 +287,7 @@ public class RewriteValve extends ValveB
getNext().invoke(request, response);
return;
}
-
+
if (invoked.get() == Boolean.TRUE) {
try {
getNext().invoke(request, response);
@@ -292,7 +296,7 @@ public class RewriteValve extends ValveB
}
return;
}
-
+
try {
Resolver resolver = new ResolverImpl(request);
@@ -378,7 +382,7 @@ public class RewriteValve extends ValveB
// - cookie
if (rule.isCookie() && newtest != null) {
- Cookie cookie = new Cookie(rule.getCookieName(),
+ Cookie cookie = new Cookie(rule.getCookieName(),
rule.getCookieResult());
cookie.setDomain(rule.getCookieDomain());
cookie.setMaxAge(rule.getCookieLifetime());
@@ -485,28 +489,28 @@ public class RewriteValve extends ValveB
} finally {
invoked.set(null);
}
-
+
}
-
-
+
+
/**
* Get config base.
*/
protected File getConfigBase() {
- File configBase =
+ File configBase =
new File(System.getProperty("catalina.base"), "conf");
if (!configBase.exists()) {
return null;
} else {
return configBase;
}
- }
+ }
+
-
/**
* Find the configuration path where the rewrite configuration file
* will be stored.
- *
+ *
* @param resourceName
* @return
*/
@@ -532,15 +536,14 @@ public class RewriteValve extends ValveB
return result.toString();
}
-
+
/**
* This factory method will parse a line formed like:
- *
+ *
* Example:
* RewriteCond %{REMOTE_HOST} ^host1.* [OR]
- *
+ *
* @param line
- * @return
*/
public static Object parse(String line) {
StringTokenizer tokenizer = new StringTokenizer(line);
@@ -591,7 +594,7 @@ public class RewriteValve extends ValveB
}
String name = tokenizer.nextToken();
String rewriteMapClassName = tokenizer.nextToken();
- RewriteMap map = null;
+ RewriteMap map = null;
try {
map = (RewriteMap)
(Class.forName(rewriteMapClassName).newInstance());
} catch (Exception e) {
@@ -612,11 +615,11 @@ public class RewriteValve extends ValveB
}
return null;
}
-
-
+
+
/**
* Parser for RewriteCond flags.
- *
+ *
* @param condition
* @param flag
*/
@@ -629,11 +632,11 @@ public class RewriteValve extends ValveB
throw new IllegalArgumentException("Invalid flag in: " + line + "
flags: " + flag);
}
}
-
-
+
+
/**
* Parser for ReweriteRule flags.
- *
+ *
* @param rule
* @param flag
*/
@@ -736,7 +739,7 @@ public class RewriteValve extends ValveB
throw new IllegalArgumentException("Invalid flag in: " + line + "
flag: " + flag);
}
}
-
+
/**
* Determine if a URI string has a <code>scheme</code> component.
@@ -753,5 +756,4 @@ public class RewriteValve extends ValveB
}
return false;
}
-
}
Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/Substitution.java Mon
Jan 21 20:28:28 2013
@@ -5,16 +5,15 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.catalina.valves.rewrite;
import java.util.ArrayList;
@@ -26,63 +25,71 @@ public class Substitution {
public abstract class SubstitutionElement {
public abstract String evaluate(Matcher rule, Matcher cond, Resolver
resolver);
}
-
+
public class StaticElement extends SubstitutionElement {
public String value;
+ @Override
public String evaluate
(Matcher rule, Matcher cond, Resolver resolver) {
return value;
}
-
+
}
-
+
public class RewriteRuleBackReferenceElement extends SubstitutionElement {
public int n;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
return rule.group(n);
}
}
-
+
public class RewriteCondBackReferenceElement extends SubstitutionElement {
public int n;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
return cond.group(n);
}
}
-
+
public class ServerVariableElement extends SubstitutionElement {
public String key;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
return resolver.resolve(key);
}
}
-
+
public class ServerVariableEnvElement extends SubstitutionElement {
public String key;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
return resolver.resolveEnv(key);
}
}
-
+
public class ServerVariableSslElement extends SubstitutionElement {
public String key;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
return resolver.resolveSsl(key);
}
}
-
+
public class ServerVariableHttpElement extends SubstitutionElement {
public String key;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
return resolver.resolveHttp(key);
}
}
-
+
public class MapElement extends SubstitutionElement {
public RewriteMap map = null;
public String key;
public String defaultValue = null;
+ @Override
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
String result = map.lookup(key);
if (result == null) {
@@ -91,7 +98,7 @@ public class Substitution {
return result;
}
}
-
+
protected SubstitutionElement[] elements = null;
protected String sub = null;
@@ -100,11 +107,11 @@ public class Substitution {
public void parse(Map<String, RewriteMap> maps) {
- ArrayList<SubstitutionElement> elements = new
ArrayList<SubstitutionElement>();
+ ArrayList<SubstitutionElement> elements = new ArrayList<>();
int pos = 0;
int percentPos = 0;
int dollarPos = 0;
-
+
while (pos < sub.length()) {
percentPos = sub.indexOf('%', pos);
dollarPos = sub.indexOf('$', pos);
@@ -211,17 +218,16 @@ public class Substitution {
}
}
}
-
- this.elements = (SubstitutionElement[]) elements.toArray(new
SubstitutionElement[0]);
-
+
+ this.elements = elements.toArray(new SubstitutionElement[0]);
+
}
-
+
/**
* Evaluate the substitution based on the context
- *
+ *
* @param rule corresponding matched rule
* @param cond last matched condition
- * @return
*/
public String evaluate(Matcher rule, Matcher cond, Resolver resolver) {
StringBuffer buf = new StringBuffer();
@@ -230,5 +236,4 @@ public class Substitution {
}
return buf.toString();
}
-
}
Modified:
tomcat/trunk/java/org/apache/catalina/valves/rewrite/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/mbeans-descriptors.xml?rev=1436593&r1=1436592&r2=1436593&view=diff
==============================================================================
Binary files - no diff available.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]