CORS AWS使用Lambda(JAVA)

时间:2017-06-02 01:12:15

标签: angularjs amazon-web-services cors aws-lambda

我正在使用带有Java Lambda后端的AWS API网关。 在使用Angular 4的朋友试图提出请求之前,一切都很好。他不断得到:

  

阻止跨源请求:同源策略禁止读取   URL上的远程资源(原因:CORS标头   '访问控制允许来源'丢失)。

我通过网关启用了CORS:

AWS image

尽管如此,错误仍然存​​在。我应该修改什么?

感谢。

伊恩的评论: 我使用输出/输入流,所以我的输出,根据你的评论我尝试如下,但仍然没有成功。有任何想法吗 ?

private void sendResponse(JSONObject body, int statusCode, OutputStream outputStream)
{   
    OutputStreamWriter writer;                                                             
    JSONObject responseJson = new JSONObject(); 
    JSONObject responseHeadersJson = new JSONObject();
    responseHeadersJson.put("Access-Control-Allow-Origin","*");
    responseHeadersJson.put("Access-Control-Allow-Headers","Content-Type");

    responseJson.put("headers",responseHeadersJson);
    responseJson.put("statusCode", statusCode);
    responseJson.put("body", body.toJSONString());          
    try {
        writer = new OutputStreamWriter(outputStream, "UTF-8");
        writer.write(responseJson.toJSONString());  
        writer.close(); 
    } catch (IOException e) {
        System.out.println("Outputstream Error "+e);
    }}

1 个答案:

答案 0 :(得分:1)

我可以看到您正在使用代理资源。

这意味着您正在控制从Lambda返回的响应。还需要通过添加origin头来在响应上配置CORS。

构建响应时,需要通过传递域或*来添加cors头。

我已经构建了一个可以用作示例的ResponseBuilder:

https://github.com/ahpoi/commons-utils-sdk/blob/master/src/main/java/com/ahpoi/commons/utils/aws/lambda/model/proxy/response/ResponseBuilder.java

public ResponseBuilder originHeader(String domain) {
    headers.put(ACCESS_CONTROL_ALLOW_ORIGIN, domain);
    return this;
}

private void initDefaultHeaders() {
    headers.put(ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type");
}

public Response build() {
    this.initDefaultHeaders();
    return new Response(statusCode, headers, body);
}

如果您没有使用代理资源,那么您的配置就足够了。