Origin ist nicht erlaubt von Access-Control-Allow-Origin - wie man CORS mit einem sehr einfachen Web-Stack und GUICE aktiviert

8

Ich bin mir nicht sicher, ob das Problem die beteiligten Technologien oder mein Verständnis der Technologien sind.

Ich habe eine html5-Anwendung geschrieben in Javascript und html gehostet auf einem Apache 2.2-Server.

Ich habe eine Java-Anwendung geschrieben in Java mit Jetty, Guice, Jackson, Jersey, die einen einfachen REST-Service hostet.

Beide Anwendungen laufen auf der gleichen Box, eine auf Port 80 (reine HTML5-Anwendung auf Apache gehostet), die andere auf 8080 (reine Java-Anwendung gehostet auf Jetty / Guice)

Ich glaube, die Antwort ist in den Headern, die ich zurücksende. Die CORS-Header sagen einem Browser, dass Sie externen Anwendungen erlauben, Ihre API zu treffen. Ich kann anscheinend nicht herausfinden, wie man meinen Jetty, Guice Server konfiguriert, um die richtigen CORS-Header zurückzugeben.

Ich verwende einen eingebetteten Jetty-Server, daher habe ich keine web.xml-Datei, um die Header mit hinzuzufügen.

Es könnte auch etwas damit zu tun haben, wie der HTML5-Anwendungsserver (in diesem Fall Apache 2.2) die Anwendung bedient.

Die Apache httpd.conf Datei hat den Eintrag:

%Vor%

in meiner guice Servlet Konfiguration habe ich folgendes:

%Vor%

Ich denke, das Problem liegt in meiner guice-Konfiguration, da ich keinen Platz habe, um die Antwortheader zu setzen.

Ich benutze einen eingebetteten Jetty-Server und dachte mir, dass der Dev-Modus die gesamte Überprüfung umgehen würde, aber ich könnte mich irren.

Danke für irgendeinen Rat.

    
AnthonyJClink 03.05.2013, 04:56
quelle

2 Antworten

9

Entsprechen Sie den spezifischen Anforderungen meiner Anwendung. Der Server muss komplett vom Client getrennt gespeichert werden. Der Client sollte in der Lage sein, sich auf jede Art und Weise mit dem Kommunikationsserver zu verbinden.

Da die erste Implementierung dieser Anwendung REST-gesteuert wird, muss ich in der Lage sein, Ruhe von überall zu akzeptieren.

Zusätzlich möchte ich eine komplett xml-lose Konfiguration, also verwende ich Guice mit einem eingebetteten Jetty-Server. Da ich keine web.xml-Datei habe, konnte ich nicht herausfinden, wie die Header so eingestellt werden, dass sie CORS erlauben.

Nach vielen Versuchen und Fehlern und dem Lesen der richtigen Dokumentation habe ich herausgefunden, wie man die CORS-Header zu der Antwort hinzufügt, die den Server verlässt.

Mit der Guice-ServletModule-Klasse können Sie Ihrem Servlet-Kontext Filter hinzufügen. Dies ermöglicht mir, dass alle Anforderungen ein bestimmtes Servlet durchlaufen.

Da ich versuche, eine Rest-Anwendung zu erstellen, die auf CORS-Anfragen reagiert, brauchte ich einen Filter, der die Corse-Header zur Antwort jeder Anfrage hinzufügt. Im Moment reagiert es auf alle Anfragen, aber letztendlich werde ich nur antworten, wenn die Service-Schicht mit einem Antwortcode von 200 - 300 antwortet.

Um cors in meinem eingebetteten Server mit guice zu aktivieren, habe ich einen Filter erstellt, der folgendermaßen aussieht:

%Vor%

Guice stellt eine abstrakte Klasse zur Verfügung, mit der Sie das Guice-Servlet konfigurieren können.

Das Konfigurationsmodul sieht folgendermaßen aus:

%Vor%

Nun wird cors Header jeder Antwort hinzufügen. Ich erlaube meiner reinen HTML-5-Anwendung, mit ihr zu sprechen, egal wo sie bedient wird.

    
AnthonyJClink 05.05.2013, 01:16
quelle
4

Fügen Sie einfach eine Zeile in Ihre Codedatei ein

  

response.addHeader ("Zugriffssteuerung-Zulassen-Ursprung", "*");

Ersetzen Sie * durch Ihre Ссылка , wenn Sie nur eine bestimmte Domain zulassen möchten

    
kunal saxena 24.07.2014 07:13
quelle