Skip to content

Commit 498e989

Browse files
committed
Added unit test for Jersey principal injection.
1 parent 2b962c8 commit 498e989

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ public AwsProxyRequestBuilder authorizerPrincipal(String principal) {
168168
this.request.getRequestContext().setAuthorizer(new ApiGatewayAuthorizerContext());
169169
}
170170
this.request.getRequestContext().getAuthorizer().setPrincipalId(principal);
171+
if (this.request.getRequestContext().getAuthorizer().getClaims() == null) {
172+
this.request.getRequestContext().getAuthorizer().setClaims(new CognitoAuthorizerClaims());
173+
}
174+
this.request.getRequestContext().getAuthorizer().getClaims().setSubject(principal);
171175
return this;
172176
}
173177

aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import javax.ws.rs.core.Context;
2626
import javax.ws.rs.core.MediaType;
2727
import javax.ws.rs.core.Response;
28+
import javax.ws.rs.core.SecurityContext;
2829
import javax.ws.rs.core.UriInfo;
2930
import java.util.Enumeration;
3031
import java.util.Random;
@@ -37,6 +38,9 @@ public class EchoJerseyResource {
3738
public static final String SERVLET_RESP_HEADER_KEY = "X-HttpServletResponse";
3839
public static final String EXCEPTION_MESSAGE = "Fake exception";
3940

41+
@Context
42+
SecurityContext securityCtx;
43+
4044
@Path("/headers") @GET
4145
@Produces(MediaType.APPLICATION_JSON)
4246
public MapResponseModel echoHeaders(@Context ContainerRequestContext context) {
@@ -48,6 +52,16 @@ public MapResponseModel echoHeaders(@Context ContainerRequestContext context) {
4852
return headers;
4953
}
5054

55+
@Path("/security-context") @GET
56+
@Produces(MediaType.APPLICATION_JSON)
57+
public SingleValueModel getPrincipal() {
58+
SingleValueModel output = new SingleValueModel();
59+
if (securityCtx != null) {
60+
output.setValue(securityCtx.getUserPrincipal().getName());
61+
}
62+
return output;
63+
}
64+
5165
@Path("/servlet-headers") @GET
5266
@Produces(MediaType.APPLICATION_JSON)
5367
public MapResponseModel echoServletHeaders(@Context HttpServletRequest context) {

aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class JerseyAwsProxyTest {
5454
private static final String QUERY_STRING_KEY = "identifier";
5555
private static final String QUERY_STRING_NON_ENCODED_VALUE = "Space Test";
5656
private static final String QUERY_STRING_ENCODED_VALUE = "Space%20Test";
57+
private static final String USER_PRINCIPAL = "user1";
5758

5859

5960
private static ObjectMapper objectMapper = new ObjectMapper();
@@ -302,6 +303,16 @@ public void stripBasePath_route_shouldReturn404() {
302303
handler.stripBasePath("");
303304
}
304305

306+
@Test
307+
public void securityContext_injectPrincipal_expectPrincipalName() {
308+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/security-context", "GET")
309+
.authorizerPrincipal(USER_PRINCIPAL).build();
310+
311+
AwsProxyResponse resp = handler.proxy(request, lambdaContext);
312+
assertEquals(200, resp.getStatusCode());
313+
validateSingleValueModel(resp, USER_PRINCIPAL);
314+
}
315+
305316
private void validateMapResponseModel(AwsProxyResponse output) {
306317
validateMapResponseModel(output, CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE);
307318
}

0 commit comments

Comments
 (0)