2017-06-02 165 views
0

我正在使用带有Java Lambda后端的AWS API网关。 直到使用Angular 4的朋友试图发出请求之前,所有东西都是桃色的。他弟妹:阻止使用Lambda的CORS AWS(JAVA)

跨来源请求:同源策略不允许读 在URL的远程资源(原因:CORS头 “访问控制允许来源”缺失)。

我已经通过网关上启用CORS:

AWS image

尽管这样的错误仍然存​​在。我应该修改什么?

谢谢。

Ian的评论: 我使用输出/输入流,所以我的输出,根据您的意见,我想下面,但仍然没有成功。有任何想法吗 ?

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); 
    }} 
+0

你可以验证标题'Access-Control-Allow-Origin'是否存在,并且完全等于你设置的'*'?我相信你应该使用https://www.getpostman.com/ –

+0

进行测试。也可以在chrome网络面板中检查或执行curl请求并查看请求的响应头。此外,这不是角度特定的这是一个问题,JS在跨浏览器的浏览器中执行AJAX调用,浏览器在任何POST或GET请求之前自动执行OPTIONS请求以获取标题信息(如果它没有跨源标题设置然后请求被拒绝。 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy – shaunhusain

回答

1

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

这意味着您正在控制从Lambda回来的响应。需要在响应中配置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); 
} 

如果您没有使用代理服务器的资源,你的配置就足够了。

+0

编辑了这个问题,并附加了一些你的评论,但仍然没有效果。 – DevilCode

+0

谢谢。我做了一个boo boo,其中/ auth没有设置为CORS,所以我猜想一切都没有工作。感谢您的帮助。 – DevilCode