diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java index d4e75479076..50014fea926 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java @@ -74,6 +74,7 @@ public class VirtualHostStyleFilter implements ContainerRequestFilter { } //Get the value of the host String host = requestContext.getHeaderString(HttpHeaders.HOST); + host = checkHostWithoutPort(host); String domain = getDomainName(host); if (domain == null) { @@ -148,6 +149,14 @@ public class VirtualHostStyleFilter implements ContainerRequestFilter { return match; } + private String checkHostWithoutPort(String host) { + if (host.contains(":")){ + return host.substring(0, host.lastIndexOf(":")); + } else { + return host; + } + } + @VisibleForTesting public void setAuthenticationHeaderParser(AuthenticationHeaderParser parser) { this.authenticationHeaderParser = parser; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java index 1b706da9b57..eead44784ad 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java @@ -49,6 +49,7 @@ public class TestVirtualHostStyleFilter { conf = new OzoneConfiguration(); s3HttpAddr = "localhost:9878"; conf.set(S3GatewayConfigKeys.OZONE_S3G_HTTP_ADDRESS_KEY, s3HttpAddr); + s3HttpAddr = s3HttpAddr.substring(0, s3HttpAddr.lastIndexOf(":")); conf.set(S3GatewayConfigKeys.OZONE_S3G_DOMAIN_NAME, s3HttpAddr); authenticationHeaderParser = new AuthenticationHeaderParser(); authenticationHeaderParser.setAuthHeader("AWS ozone:scret"); @@ -185,9 +186,10 @@ public class TestVirtualHostStyleFilter { authenticationHeaderParser); ContainerRequest containerRequest = createContainerRequest("mybucket" + - ".localhost:9999", null, null, true); + ".myhost:9999", null, null, true); try { virtualHostStyleFilter.filter(containerRequest); + fail("testVirtualHostStyleWithNoMatchingDomain"); } catch (InvalidRequestException ex) { GenericTestUtils.assertExceptionContains("No matching domain", ex); }