2017-06-02 166 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