Skip to content

Commit 6fd1475

Browse files
authored
Merge pull request #11 from mattcorey/master
Implement getRequestURL(), getServerName(), and getServerPort() in HttpServletRequest
2 parents 5483a9c + 1682ba8 commit 6fd1475

File tree

4 files changed

+87
-6
lines changed

4 files changed

+87
-6
lines changed

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

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public String getPathTranslated() {
224224

225225
@Override
226226
public String getContextPath() {
227-
return "/";
227+
return request.getRequestContext().getStage();
228228
}
229229

230230

@@ -268,10 +268,15 @@ public String getRequestURI() {
268268
@Override
269269
public StringBuffer getRequestURL() {
270270
String url = "";
271-
url += getHeaderCaseInsensitive(HttpHeaders.HOST);
271+
url += getServerName();
272+
url += "/";
273+
url += getContextPath();
272274
url += "/";
273275
url += request.getPath();
274-
return new StringBuffer(url);
276+
277+
url = url.replaceAll("/+", "/");
278+
279+
return new StringBuffer(getScheme() + "://" + url);
275280
}
276281

277282

@@ -608,13 +613,18 @@ public String getScheme() {
608613

609614
@Override
610615
public String getServerName() {
611-
return "lambda.amazonaws.com";
616+
String name = getHeaderCaseInsensitive(HttpHeaders.HOST);
617+
618+
if (name == null || name.length() == 0) {
619+
name = "lambda.amazonaws.com";
620+
}
621+
return name;
612622
}
613623

614624

615625
@Override
616626
public int getServerPort() {
617-
return 0;
627+
return getLocalPort();
618628
}
619629

620630

@@ -720,7 +730,14 @@ public String getLocalAddr() {
720730

721731
@Override
722732
public int getLocalPort() {
723-
return 0;
733+
int port = 0;
734+
735+
if ("https".equals(getScheme())) {
736+
port = 443;
737+
} else if ("http".equals(getScheme())) {
738+
port = 80;
739+
}
740+
return port;
724741
}
725742

726743

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public AwsProxyRequestBuilder(String path, String httpMethod) {
5353
this.request.setPath(path);
5454
this.request.setQueryStringParameters(new HashMap<>());
5555
this.request.setRequestContext(new ApiGatewayRequestContext());
56+
this.request.getRequestContext().setStage("test");
5657
ApiGatewayRequestIdentity identity = new ApiGatewayRequestIdentity();
5758
identity.setSourceIp("127.0.0.1");
5859
this.request.getRequestContext().setIdentity(identity);
@@ -168,6 +169,28 @@ public AwsProxyRequestBuilder cookie(String name, String value) {
168169
return this;
169170
}
170171

172+
public AwsProxyRequestBuilder scheme(String scheme) {
173+
if (request.getHeaders() == null) {
174+
request.setHeaders(new HashMap<>());
175+
}
176+
177+
request.getHeaders().put("CloudFront-Forwarded-Proto", scheme);
178+
return this;
179+
}
180+
181+
public AwsProxyRequestBuilder serverName(String serverName) {
182+
if (request.getHeaders() == null) {
183+
request.setHeaders(new HashMap<>());
184+
}
185+
186+
request.getHeaders().put("Host", serverName);
187+
return this;
188+
}
189+
190+
public AwsProxyRequestBuilder stage(String stage) {
191+
this.request.getRequestContext().setStage(stage);
192+
return this;
193+
}
171194

172195
public AwsProxyRequest build() {
173196
return this.request;

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,31 @@ public void servletRequestEncoding_acceptEncoding_okStatusCode() {
187187
assertEquals(200, output.getStatusCode());
188188
}
189189

190+
@Test
191+
public void request_requestURI() {
192+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-URI", "GET")
193+
.build();
194+
195+
AwsProxyResponse output = handler.proxy(request, lambdaContext);
196+
assertEquals(200, output.getStatusCode());
197+
198+
validateSingleValueModel(output, "/echo/request-URI");
199+
}
200+
201+
@Test
202+
public void request_requestURL() {
203+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-Url", "GET")
204+
.scheme("https")
205+
.serverName("api.myserver.com")
206+
.stage("prod")
207+
.build();
208+
209+
AwsProxyResponse output = handler.proxy(request, lambdaContext);
210+
assertEquals(200, output.getStatusCode());
211+
212+
validateSingleValueModel(output, "https://api.myserver.com/prod/echo/request-Url");
213+
}
214+
190215
private void validateMapResponseModel(AwsProxyResponse output) {
191216
try {
192217
MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class);

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,20 @@ public ResponseEntity<byte[]> echoBinaryData() {
8383

8484
return new ResponseEntity<byte[]>(b, HttpStatus.OK);
8585
}
86+
87+
@RequestMapping(path = "/request-URI", method = RequestMethod.GET)
88+
public SingleValueModel echoRequestURI(HttpServletRequest request) {
89+
SingleValueModel valueModel = new SingleValueModel();
90+
valueModel.setValue(request.getRequestURI());
91+
92+
return valueModel;
93+
}
94+
95+
@RequestMapping(path = "/request-Url", method = RequestMethod.GET)
96+
public SingleValueModel echoRequestURL(HttpServletRequest request) {
97+
SingleValueModel valueModel = new SingleValueModel();
98+
valueModel.setValue(request.getRequestURL().toString());
99+
100+
return valueModel;
101+
}
86102
}

0 commit comments

Comments
 (0)