Implementieren Sie API Gateway Lambda Authorizer in Java Lambda

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.

Verwendung von Map

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

Wie benutzt man POJO?

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.

Zusammenfassung

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

Implementieren Sie API Gateway Lambda Authorizer in Java Lambda
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Zabbix API in Java
Implementierung der zweistufigen Authentifizierung in Java
Java Stream API in 5 Minuten
Implementieren Sie die Standardauthentifizierung in Java
Implementieren Sie eine Kombination aus Mathematik in Java
2 Implementieren Sie eine einfache Syntaxanalyse in Java
Implementieren Sie das Senden von E-Mails in Java
Implementieren Sie eine funktionsähnliche schnelle Sortierung in Java
Implementieren Sie rm -rf in Java.
Implementieren Sie die XML-Signatur in Java
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
Implementieren Sie einen tabellengesteuerten Test in Java 14
3 Implementieren Sie einen einfachen Interpreter in Java
Implementieren Sie reCAPTCHA v3 in Java / Spring
Implementieren Sie die PHP-Implodierungsfunktion in Java
Generieren Sie die CloudStack-API-URL in Java
Implementieren Sie die REST-API mit Spring Boot
Treffen Sie Zaims API (OAuth 1.0) in Java
Analysieren der COTOHA-API-Syntaxanalyse in Java
Versuchen Sie, Yuma in Java zu implementieren
1 Implementieren Sie eine einfache Phrasenanalyse in Java
JPA (Java Persistence API) in Eclipse
So implementieren Sie einen Job, der die Java-API in JobScheduler verwendet
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
So implementieren Sie die Datumsberechnung in Java
Studieren Sie Java 8 (Datums-API im Paket java.time)
Versuchen Sie, n-ary Addition in Java zu implementieren
Versuchen Sie es mit der Stream-API in Java
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Heutzutage Java Lambda Expressions und Stream API
Versuchen Sie es mit der JSON-Format-API in Java
So erzwingen Sie Codierungskonventionen in Java
Implementieren Sie so etwas wie einen Stack in Java
Behandeln Sie große JSON mit Java Lambda
Interagieren Sie mit der LINE Message API mit Lambda (Java)
ChatWork4j für die Verwendung der ChatWork-API in Java
Partisierung in Java
[Java] API-Erstellung mit Jerjey (Jax-rs) mit Eclipse
Änderungen in Java 11
Janken in Java
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Java Stream API
Verwendung der Java-API mit Lambda-Ausdrücken
Hallo Java Lambda
[Java] Lambda-Ausdruck
So implementieren Sie optimistisches Sperren in der REST-API
Umfangsrate in Java
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Java Lambda Ausdruck
FizzBuzz in Java
Versuchte Mastodons Toot- und Streaming-API in Java
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
Rufen Sie die Amazon Product Advertising API 5.0 (PA-API v5) in Java auf
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API