Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 39f970d

Browse files
mbfrederdeki
authored andcommitted
fix: Error with version 2.0.2 when multi-value header is active in alb
(cherry picked from commit 9463113)
1 parent b7cfe9b commit 39f970d

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

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

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -437,23 +437,27 @@ 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-
452-
// the host header has the form host:port, so we split the string to get the host part
453-
return Arrays.asList(hostHeader.split(":")).get(0);
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);
456+
} else {
457+
hostHeader = request.getMultiValueHeaders().getFirst(HttpHeaders.HOST);
454458
}
455-
456-
return request.getMultiValueHeaders().getFirst(HttpHeaders.HOST);
459+
// the host header has the form host:port, so we split the string to get the host part
460+
return Arrays.asList(hostHeader.split(":")).get(0);
457461
}
458462

459463

@@ -483,8 +487,11 @@ public RequestDispatcher getRequestDispatcher(String s) {
483487

484488
@Override
485489
public int getRemotePort() {
486-
if (Objects.nonNull(request.getRequestContext().getElb())) {
487-
String portHeader = request.getHeaders().get(PORT_HEADER_NAME);
490+
if (request.getRequestSource().equals(RequestSource.ALB)) {
491+
String portHeader;
492+
portHeader = Objects.nonNull(request.getHeaders()) ?
493+
request.getHeaders().get(PORT_HEADER_NAME) :
494+
request.getMultiValueHeaders().getFirst(PORT_HEADER_NAME);
488495
if (Objects.nonNull(portHeader)) {
489496
return Integer.parseInt(portHeader);
490497
}

‎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)

AltStyle によって変換されたページ (->オリジナル) /