java - 用于 Cognito 的 Java 中的 AWS Lambda 响应

标签 java amazon-web-services aws-lambda aws-sdk amazon-cognito

如何用 Java 编写“AWS Lambda 响应”以使 Cognito 满意?

像这样的东西被传递给 lambda 函数

{
"version": number,
"triggerSource": "string",
"region": AWSRegion,
"userPoolId": "string",
"callerContext": 
    {
        "awsSdkVersion": "string",
        "clientId": "string"
    },
"request":
    {
        "userAttributes": {
            "string": "string",
            ....
        }
    },
"response": {}
}

现在我需要用 Java 做出响应.. 并发送回 Cognito。目前 Cognito 抛出一个 “无效的LambdaResponseException”。

下面的 Java 代码只返回事件..
public class LambdaFunctionHandler implements RequestHandler<CognitoEvent, CognitoEvent> 
{
    @Override
    public CognitoEvent handleRequest(CognitoEvent arg0, Context arg1) 
    {
        return arg0;
    }
}

最佳答案

你只需要一个这样的类:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.Map;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonSerialize
public class Example {
    private int version;
    private String triggerSource;
    private String region;
    private String userPoolId;
    private Map<String, String> callerContext;
    private Request request;
    private Response response;

    @Getter
    @Setter
    @JsonSerialize
    public static class Request {
        private Map<String, String> userAttributes;
        public Request(Map<String, String> userAttr) {
            userAttributes = userAttr;
        }
    }

    @Getter
    @Setter
    @JsonSerialize
    public static class Response { }

}

序列化后将如下所示:
{
  "version" : 1,
  "triggerSource" : "trigger",
  "region" : "us-east-1",
  "userPoolId" : "user-pool-id",
  "callerContext" : {
    "some-key" : "some-value"
  },
  "request" : {
    "userAttributes" : {
      "name" : "Michael J Leonard"
    }
  },
  "response" : { }
}

并将其作为 lambda 的输入。它可能需要一些更改,但这是 PostAuthentication lambda 的模板示例

关于java - 用于 Cognito 的 Java 中的 AWS Lambda 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46526687/

相关文章:

Java - 从文件中读取单词并删除双引号

java - 我的 Java Spring Boot Maven REST API 不起作用

javascript - 从桌面应用程序连接到 AWS MySQL 数据库

python - AWS Glue 和更新复制数据

go - 如何使用无服务器框架处理手动调用的 AWS lambda

python - 使用 zappa 部署到 AWS Lambda 时,spaCy 抛出 OSError

node.js - 如何从Lambda批处理中失败特定的SQS消息?

java - 使用java更改h2数据库创建位置

java - Eclipse 启动时出现 NumberFormatException

amazon-web-services - 须藤: stop: command not found