Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse McConnell2012-11-29 16:53:50 +0000
committerJesse McConnell2012-11-29 16:53:50 +0000
commit90b8f60e7b59eb62418c0339ea9bf1f0312c05ad (patch)
tree220f99d20523fe15864b74753918727fcbfe745b /jetty-rewrite
parent2723c415bf3668496a63576edb2886cb236f5474 (diff)
downloadorg.eclipse.jetty.project-90b8f60e7b59eb62418c0339ea9bf1f0312c05ad.tar.gz
org.eclipse.jetty.project-90b8f60e7b59eb62418c0339ea9bf1f0312c05ad.tar.xz
org.eclipse.jetty.project-90b8f60e7b59eb62418c0339ea9bf1f0312c05ad.zip
[Bug 395380] add ValidUrlRule to jetty-rewrite
Diffstat (limited to 'jetty-rewrite')
-rw-r--r--jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ValidUrlRule.java81
-rw-r--r--jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/ValidUrlRuleTest.java51
2 files changed, 132 insertions, 0 deletions
diff --git a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ValidUrlRule.java b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ValidUrlRule.java
new file mode 100644
index 0000000000..34f4b0f977
--- /dev/null
+++ b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ValidUrlRule.java
@@ -0,0 +1,81 @@
+package org.eclipse.jetty.rewrite.handler;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ValidUrlRule extends Rule
+{
+ String _code = "400";
+ String _reason = "Illegal Url";
+
+ public ValidUrlRule()
+ {
+ _handling = true;
+ _terminating = true;
+ }
+
+ /* ------------------------------------------------------------ */
+ /**
+ * Sets the response status code.
+ *
+ * @param code
+ * response code
+ */
+ public void setCode(String code)
+ {
+ _code = code;
+ }
+
+ /* ------------------------------------------------------------ */
+ /**
+ * Sets the reason for the response status code. Reasons will only reflect if the code value is greater or equal to 400.
+ *
+ * @param reason
+ */
+ public void setReason(String reason)
+ {
+ _reason = reason;
+ }
+
+ @Override
+ public String matchAndApply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
+ {
+ String uri = request.getRequestURI();
+
+ for (int i = 0; i < uri.length(); ++i)
+ {
+ if (!isPrintableChar(uri.charAt(i)))
+ {
+ int code = Integer.parseInt(_code);
+
+ // status code 400 and up are error codes so include a reason
+ if (code >= 400)
+ {
+ response.sendError(code,_reason);
+ }
+ else
+ {
+ response.setStatus(code);
+ }
+
+ return target;
+ }
+ }
+
+ return null;
+ }
+
+ protected boolean isPrintableChar(char c)
+ {
+ Character.UnicodeBlock block = Character.UnicodeBlock.of(c);
+
+ return (!Character.isISOControl(c)) && block != null && block != Character.UnicodeBlock.SPECIALS;
+ }
+
+ public String toString()
+ {
+ return super.toString() + "[" + _code + ":" + _reason + "]";
+ }
+}
diff --git a/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/ValidUrlRuleTest.java b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/ValidUrlRuleTest.java
new file mode 100644
index 0000000000..ebd558a188
--- /dev/null
+++ b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/ValidUrlRuleTest.java
@@ -0,0 +1,51 @@
+package org.eclipse.jetty.rewrite.handler;
+
+import static org.junit.Assert.assertEquals;
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class ValidUrlRuleTest extends AbstractRuleTestCase
+{
+ private ValidUrlRule _rule;
+
+ @Before
+ public void init() throws Exception
+ {
+ start(true);
+ _rule = new ValidUrlRule();
+ }
+
+ @Test
+ public void testValidUrl() throws Exception
+ {
+ _rule.setCode("404");
+ _request.setRequestURI("/valid/uri.html");
+
+ String result = _rule.matchAndApply(_request.getRequestURI(), _request, _response);
+
+ assertEquals(200,_response.getStatus());
+ }
+
+ @Test
+ public void testInvalidUrl() throws Exception
+ {
+ _rule.setCode("404");
+ _request.setRequestURI("/invalid\u000c/uri.html");
+
+ String result = _rule.matchAndApply(_request.getRequestURI(), _request, _response);
+
+ assertEquals(404,_response.getStatus());
+ }
+
+ @Test
+ public void testCharacters() throws Exception
+ {
+ // space
+ Assert.assertTrue( _rule.isPrintableChar("\u0020".charAt(0)));
+ // form feed
+ Assert.assertFalse( _rule.isPrintableChar("\u000c".charAt(0)));
+ }
+}
+

Back to the top