2017-06-02 14 views
0

Ich verwende AWS API Gateway mit einem Java Lambda Backend. Alles ist schön, bis ein Freund mit Angular 4 versucht, Anfragen zu stellen. Er wird immer:CORS AWS mit Lambda (JAVA)

Cross-Origin-Anforderung blockiert: Die Same Origin Policy nicht zulässt die Remote-Ressource unter der URL zu lesen (Grund: CORS-Header 'Access-Control-Allow-Origin' fehlt).

Ich habe CORS über das Gateway aktiviert:

AWS image

dies trotz der Fehler bleibt. Was soll ich ändern?

Danke.

Ians Kommentare: Ich benutze Output/Input Streams also meine Ausgabe, wie ich Ihren Kommentar versuche ich unten, aber immer noch keinen Erfolg. Irgendwelche Ideen ?

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

Können Sie überprüfen, ob der Header 'Access-Control-Allow-Origin' existiert und genau dem entspricht, den Sie gesetzt haben: '*'? Ich glaube, Sie sollten dies mit https://www.getpostman.com/ –

+0

testen können auch nur in der Chrome-Netzwerk-Panel einchecken oder eine Curl-Anfrage und sehen Sie die Antwort-Header für die Anfrage. Auch dies ist nicht winkelspezifisch. Es ist ein Problem mit JS, das einen AJAX-Aufruf in einem Browser über Domänen hinweg durchführt. Der Browser führt die OPTIONS-Anfrage automatisch vor einer POST- oder GET-Anfrage aus, um die Header-Informationen zu erhalten, wenn er keine Kreuzursprung-Header hat gesetzt, dann wird die Anfrage abgelehnt. https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy – shaunhusain

Antwort

1

Ich kann sehen, dass Sie Proxy-Ressource verwenden.

Das bedeutet, dass Sie die Antwort steuern, die von Ihrem Lambda zurückgeht. CORS muss auch in der Antwort konfiguriert werden, indem der Ursprungsheader hinzugefügt wird.

Wenn Sie die Antwort erstellen, müssen Sie die Korsheader hinzufügen, indem Sie die Domäne oder * übergeben.

ich einen ResponseBuilder gebaut haben, die Sie als Beispiel verwenden können:

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

Wenn Sie nicht Proxy-Ressource nicht genutzt haben, Ihre Konfiguration wäre genug gewesen.

+0

Bearbeitete die Frage mit einigen Hinzufügungen von Ihren Kommentaren, aber noch keine Wirkung. – DevilCode

+0

Danke. Ich hatte einen Fehler gemacht, wo die/auth nicht auf CORS gesetzt war, also denke ich, dass alles danach auch nicht funktioniert hat. Danke für die Hilfe. – DevilCode