summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-12-22 09:54:15 +0100
committerJon Marius Venstad <venstad@gmail.com>2020-12-22 09:54:15 +0100
commitea50af2f89c8bc5ba8b132b971c082a8cce4ad54 (patch)
tree0e44d3ab0ef1ab961d50c46452078525b04dde97 /jdisc_core
parent3c9108ed10ba6cb0b02eeceb52f3e3176f8b121a (diff)
Revert require port from URI when specified in binding
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/application/UriPattern.java16
-rw-r--r--jdisc_core/src/test/java/com/yahoo/jdisc/application/UriPatternTestCase.java9
2 files changed, 24 insertions, 1 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/application/UriPattern.java b/jdisc_core/src/main/java/com/yahoo/jdisc/application/UriPattern.java
index 53d276b3fb6..016a2fd796a 100644
--- a/jdisc_core/src/main/java/com/yahoo/jdisc/application/UriPattern.java
+++ b/jdisc_core/src/main/java/com/yahoo/jdisc/application/UriPattern.java
@@ -95,7 +95,7 @@ public class UriPattern implements Comparable<UriPattern> {
*/
public Match match(URI uri) {
// Performance optimization: match in order of increasing cost and decreasing discriminating power.
- if (port > 0 && port != uri.getPort())
+ if (port > 0 && port != portOrSchemeDefault(uri))
return null;
String uriPath = nonNullOrBlank(uri.getRawPath());
@@ -172,6 +172,20 @@ public class UriPattern implements Comparable<UriPattern> {
return Integer.parseInt(str);
}
+ private static int portOrSchemeDefault(URI uri) {
+ return uri.getPort() != -1 ? uri.getPort()
+ : schemeDefaultPort(uri.getScheme());
+ }
+
+ private static int schemeDefaultPort(String scheme) {
+ if (scheme == null) return -1;
+ switch (scheme) {
+ case "http": return 80;
+ case "https": return 443;
+ default: return -1;
+ }
+ }
+
private static String normalizeScheme(String scheme) {
if (scheme.equals("https")) return "http"; // handle 'https' in bindings and uris as 'http'
return scheme;
diff --git a/jdisc_core/src/test/java/com/yahoo/jdisc/application/UriPatternTestCase.java b/jdisc_core/src/test/java/com/yahoo/jdisc/application/UriPatternTestCase.java
index 0ea82508f06..c7d0b9ff6d2 100644
--- a/jdisc_core/src/test/java/com/yahoo/jdisc/application/UriPatternTestCase.java
+++ b/jdisc_core/src/test/java/com/yahoo/jdisc/application/UriPatternTestCase.java
@@ -263,6 +263,15 @@ public class UriPatternTestCase {
}
@Test
+ public void requireThatUrisWithImplicitPortFromSchemeMatchesBindingWithExplicitPort() {
+ UriPattern httpPattern = new UriPattern("http://host:80/path");
+ assertMatch(httpPattern, "http://host/path", NO_GROUPS);
+
+ UriPattern httpsPattern = new UriPattern("https://host:443/path");
+ assertMatch(httpsPattern, "https://host/path", NO_GROUPS);
+ }
+
+ @Test
public void requireThatHttpsSchemeIsHandledAsHttp() {
UriPattern httpPattern = new UriPattern("http://host:80/path");
assertMatch(httpPattern, "https://host:80/path", NO_GROUPS);