Im Lambda Authorizer von API Gateway (Rest API) [Geben Sie den angegebenen JSON zurück](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-lambda-authorizer] in der Antwort von Lambda -output.html) Muss sein.
Was ist Lambda Authorizer? Klicken Sie hier [https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html].
Mit Node.js können Sie JSON so zurückgeben, wie es ist. Es ist bequem.
exports.handler = async (event) => {
console.log(JSON.stringify(event, null, 4));
return {
"principalId": "1234",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": event.methodArn
}
]
}
};
};
Im Fall von Java kann JSON nicht zurückgegeben werden, und die Rückgabe von JSON als Zeichenfolge funktioniert nicht. Es gibt zwei Methoden: Die Map verwendet Map und die POJO-Klasse.
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class MapLambdaAuthorizer implements RequestHandler<Map<String, Object>, Map<String, Object>> {
@Override
public Map<String, Object> handleRequest(Map<String, Object> event, Context lambdaContext) {
Map<String, Object> response = new HashMap<String, Object>();
response.put("principalId", "1234");
Map<String, Object> policyDocument = new HashMap<String, Object>();
policyDocument.put("Version", "2012-10-17");
Map<String, String> statement = new HashMap<>();
statement.put("Action", "execute-api:Invoke");
statement.put("Effect", "Allow");
statement.put("Resource", (String) event.get("methodArn"));
policyDocument.put("Statement", Arrays.asList(statement));
response.put("policyDocument", policyDocument);
Map<String, String> context = new HashMap<String, String>();
context.put("now", new Date().toString());
response.put("context", context);
return response;
}
}
https://github.com/kazfuku/apigateway-java-lambda-authorizer/blob/master/lambda/authorizer/src/main/java/com/kazfuku/aws/MapLambdaAuthorizer.java
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class PojoLambdaAuthorizer implements RequestHandler<Map<String, Object>, AuthorizerResponse> {
@Override
public AuthorizerResponse handleRequest(Map<String, Object> event, Context lambdaContext) {
AuthorizerResponse response = new AuthorizerResponse();
response.setPrincipalId("1234");
Map<String, Object> policyDocument = new HashMap<>();
policyDocument.put("Version", "2012-10-17");
Map<String, String> statement = new HashMap<>();
statement.put("Action", "execute-api:Invoke");
statement.put("Effect", "Allow");
statement.put("Resource", (String) event.get("methodArn"));
policyDocument.put("Statement", Arrays.asList(statement));
response.setPolicyDocument(policyDocument);
Map<String, String> context = new HashMap<>();
context.put("now", new Date().toString());
response.setContext(context);
return response;
}
}
https://github.com/kazfuku/apigateway-java-lambda-authorizer/blob/master/lambda/authorizer/src/main/java/com/kazfuku/aws/PojoLambdaAuthorizer.java
import java.util.Map;
public class AuthorizerResponse {
private String principalId;
public void setPrincipalId(String principalId) {
this.principalId = principalId;
}
public String getPrincipalId() {
return this.principalId;
}
private Map<String, Object> policyDocument;
public void setPolicyDocument(Map<String, Object> policyDocument) {
this.policyDocument = policyDocument;
}
public Map<String, Object> getPolicyDocument() {
return this.policyDocument;
}
private Map<String, String> context;
public Map<String, String> getContext() {
return context;
}
public void setContext(Map<String, String> context) {
this.context = context;
}
}
https://github.com/kazfuku/apigateway-java-lambda-authorizer/blob/master/lambda/authorizer/src/main/java/com/kazfuku/aws/AuthorizerResponse.java
Wenn du es POJO machen willst
policyDocument.put("Version", "2012-10-17");
statement.put("Action", "execute-api:Invoke");
Es ist unangenehm, wenn ich POJO nicht verwende, aber wenn ich POJO verwende, beginnt der an API Gateway zurückgegebene JSON-Schlüsselname mit einem Kleinbuchstaben (Version, Aktion) und wird nicht gut interpretiert.
Da JSON nicht so groß ist, ist die Map-Methode meiner Meinung nach einfacher zu lesen.
Source Code https://github.com/kazfuku/apigateway-java-lambda-authorizer
Recommended Posts