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 d4e7547907..50014fea92 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 void filter(ContainerRequestContext requestContext) throws } //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 @@ private String getDomainName(String host) { 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 1b706da9b5..eead44784a 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 void setup() { 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 void testVirtualHostStyleWithNoMatchingDomain() throws Exception { 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); }