Skip to content

Commit 0d7f617

Browse files
committed
fix: Error with version 2.0.2 when multi-value header is active in alb
1 parent 58084d9 commit 0d7f617

File tree

2 files changed

+31
-9
lines changed

2 files changed

+31
-9
lines changed

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

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -437,23 +437,28 @@ public String getRemoteAddr() {
437437
if (request.getRequestContext() == null || request.getRequestContext().getIdentity() == null) {
438438
return "127.0.0.1";
439439
}
440-
if (request.getRequestContext().getElb() != null) {
441-
return request.getHeaders().get(CLIENT_IP_HEADER);
440+
if (request.getRequestSource().equals(RequestSource.ALB)) {
441+
return Objects.nonNull(request.getHeaders()) ?
442+
request.getHeaders().get(CLIENT_IP_HEADER) :
443+
request.getMultiValueHeaders().getFirst(CLIENT_IP_HEADER);
442444
}
443445
return request.getRequestContext().getIdentity().getSourceIp();
444446
}
445447

446448

447449
@Override
448450
public String getRemoteHost() {
449-
if (Objects.nonNull(request.getRequestContext().getElb())) {
450-
String hostHeader = request.getHeaders().get(HttpHeaders.HOST);
451+
String hostHeader;
452+
if (request.getRequestSource().equals(RequestSource.ALB)) {
453+
hostHeader = Objects.nonNull(request.getHeaders()) ?
454+
request.getHeaders().get(HttpHeaders.HOST) :
455+
request.getMultiValueHeaders().getFirst(HttpHeaders.HOST);
451456

452457
// the host header has the form host:port, so we split the string to get the host part
453458
return Arrays.asList(hostHeader.split(":")).get(0);
454459
}
455-
456-
return request.getMultiValueHeaders().getFirst(HttpHeaders.HOST);
460+
hostHeader = request.getMultiValueHeaders().getFirst(HttpHeaders.HOST);
461+
return Arrays.asList(hostHeader.split(":")).get(0);
457462
}
458463

459464

@@ -483,8 +488,11 @@ public RequestDispatcher getRequestDispatcher(String s) {
483488

484489
@Override
485490
public int getRemotePort() {
486-
if (Objects.nonNull(request.getRequestContext().getElb())) {
487-
String portHeader = request.getHeaders().get(PORT_HEADER_NAME);
491+
if (request.getRequestSource().equals(RequestSource.ALB)) {
492+
String portHeader;
493+
portHeader = Objects.nonNull(request.getHeaders()) ?
494+
request.getHeaders().get(PORT_HEADER_NAME) :
495+
request.getMultiValueHeaders().getFirst(PORT_HEADER_NAME);
488496
if (Objects.nonNull(portHeader)) {
489497
return Integer.parseInt(portHeader);
490498
}

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,17 +652,31 @@ void serverName_albHostHeader_returnsHostHeader() {
652652
}
653653

654654
@Test
655-
void getRemoteHost_albHostHeader_returnsHostHeader() {
655+
void getRemoteHost_albHostHeader_singleValue_returnsHostHeader() {
656656
initAwsProxyHttpServletRequestTest("ALB");
657657
AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/test", "GET")
658658
.alb().build();
659+
proxyReq.setMultiValueHeaders(null);
659660
proxyReq.getHeaders().put(HttpHeaders.HOST, "testapi.us-east-1.elb.amazonaws.com");
660661
HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyReq, null, null);
661662

662663
String host = servletRequest.getRemoteHost();
663664
assertEquals("testapi.us-east-1.elb.amazonaws.com", host);
664665
}
665666

667+
@Test
668+
void getRemoteHost_albHostHeader_multiValue_returnsHostHeader() {
669+
initAwsProxyHttpServletRequestTest("ALB");
670+
AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/test", "GET")
671+
.header(HttpHeaders.HOST, "testapi.us-east-1.elb.amazonaws.com")
672+
.alb().build();
673+
proxyReq.setHeaders(null);
674+
HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyReq, null, null);
675+
676+
String host = servletRequest.getRemoteHost();
677+
assertEquals("testapi.us-east-1.elb.amazonaws.com", host);
678+
}
679+
666680
private AwsProxyRequestBuilder getRequestWithHeaders() {
667681
return new AwsProxyRequestBuilder("/hello", "GET")
668682
.header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE)

0 commit comments

Comments
 (0)