Skip to content

Commit 0cfbd8e

Browse files
authored
Merge pull request #684 from mbfreder/alb-incorrect-server-name
Fix: Incorrect ServerName with ALB
2 parents b4c3dc5 + 58fdc7c commit 0cfbd8e

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package com.amazonaws.serverless.proxy.internal;
1414

15+
import com.amazonaws.serverless.proxy.model.AlbContext;
16+
import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext;
1517
import com.amazonaws.serverless.proxy.model.ContainerConfig;
1618
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
1719
import org.slf4j.Logger;
@@ -21,6 +23,7 @@
2123
import java.io.IOException;
2224
import java.util.HashSet;
2325
import java.util.Locale;
26+
import java.util.Objects;
2427
import java.util.Set;
2528

2629
/**
@@ -60,11 +63,15 @@ public static boolean isValidScheme(String scheme) {
6063
return SCHEMES.contains(scheme);
6164
}
6265

63-
public static boolean isValidHost(String host, String apiId, String region) {
66+
public static boolean isValidHost(String host, String apiId, AlbContext elb, String region) {
6467
if (host == null) {
6568
return false;
6669
}
67-
if (host.endsWith(".amazonaws.com")) {
70+
if (!Objects.isNull(elb)) {
71+
String albhost = new StringBuilder().append(region)
72+
.append(".elb.amazonaws.com").toString();
73+
return host.endsWith(albhost) || LambdaContainerHandler.getContainerConfig().getCustomDomainNames().contains(host);
74+
} else if (host.endsWith(".amazonaws.com")) {
6875
String defaultHost = new StringBuilder().append(apiId)
6976
.append(".execute-api.")
7077
.append(region)

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ public String getServerName() {
348348

349349
if (headers != null && headers.containsKey(HOST_HEADER_NAME)) {
350350
String hostHeader = headers.getFirst(HOST_HEADER_NAME);
351-
if (SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), region)) {
351+
if (SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), request.getRequestContext().getElb(), region)) {
352352
return hostHeader;
353353
}
354354
}

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ public String getServerName() {
390390

391391
if (request.getMultiValueHeaders() != null && request.getMultiValueHeaders().containsKey(HOST_HEADER_NAME)) {
392392
String hostHeader = request.getMultiValueHeaders().getFirst(HOST_HEADER_NAME);
393-
if (SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), region)) {
393+
if (SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), request.getRequestContext().getElb(), region)) {
394394
return hostHeader;
395395
}
396396
}

aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder;
66

77
import com.amazonaws.services.lambda.runtime.Context;
8+
import org.junit.jupiter.api.Test;
89
import org.junit.jupiter.params.ParameterizedTest;
910
import org.junit.jupiter.params.provider.MethodSource;
1011

@@ -640,6 +641,16 @@ void serverName_hostHeader_returnsHostHeaderOnly(String type) {
640641
assertEquals("testapi.com", serverName);
641642
}
642643

644+
@Test
645+
void serverName_albHostHeader_returnsHostHeader() {
646+
initAwsProxyHttpServletRequestTest("ALB");
647+
AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/test", "GET")
648+
.header(HttpHeaders.HOST, "testapi.us-east-1.elb.amazonaws.com");
649+
HttpServletRequest servletReq = getRequest(proxyReq, null, null);
650+
String serverName = servletReq.getServerName();
651+
assertEquals("testapi.us-east-1.elb.amazonaws.com", serverName);
652+
}
653+
643654
private AwsProxyRequestBuilder getRequestWithHeaders() {
644655
return new AwsProxyRequestBuilder("/hello", "GET")
645656
.header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE)

0 commit comments

Comments
 (0)