CORS Play-Framework

9

Ich entwickle eine Angular 2-Anwendung auf einem Play Framework 2.5 (Java) Back-End. Wenn ich über die Browser-URL auf meine Endpunkte zugreife, funktionieren sie einwandfrei. Der Aufruf von der Angular 2-Anwendung zeigt jedoch den Fehler:

  

XMLHttpRequest kann localhost: 9000 / app / myendpoint nicht laden. Nein   Der Header 'Access-Control-Allow-Origin' ist auf dem angeforderten Header vorhanden   Ressource. Herkunft 'localhost: 3000' ist daher nicht erlaubt   Zugriff. Die Antwort hatte den HTTP-Statuscode 500.

Ich habe versucht, der Dokumentation zu folgen und den Filter zu erstellen:

In der application.conf:

%Vor%

Filter:

%Vor%

In build.sbt:

%Vor%

Kennt jemand die wahre Lösung? Danke:)

Arbeitscode:

Filters.java (auf der Projektwurzel)

%Vor%

In der application.conf:

%Vor%

In build.sbt:

%Vor%

Danke euch allen! :)

    
Patriicya 16.08.2016, 20:56
quelle

6 Antworten

1

Ich erinnere mich daran, dass ich das gleiche Importproblem hatte, da ich denke, dass es einige Änderungen bei den Filtern in Play irgendwo um 2.5.0 gab. Und DefaultHttpFilters wurde während des Refactorings durch HttpFilters ersetzt.

Überprüfen Sie den Quellcode auf den korrekten Pfad zu HttpFilters . Wählen Sie das richtige Tag für die Version von Play, die Sie verwenden, und durchsuchen Sie den Quellbaum, bis Sie HttpFilters gefunden haben, und überprüfen Sie das Paket. Dies ist der Pfad für die Java-API für v 2.5.0 .

In Ihrem Post scheint es, dass Sie die Java-API verwenden, aber den Import für die Scala-Version verwenden.

Die Importe für Play 2.5.0 sind: -

Scala - import play.api.http.HttpFilters
Java - import play.http.HttpFilters

Ich benutze Play 2.5.0 (Scala though - nicht Java) und dieser Import funktioniert gut für mich: -

%Vor%

Nach dem, was du gepostet hast, solltest du versuchen, deinen problematischen Import zu ändern: -

%Vor%

Ich nehme auch an, dass Sie das Paket für Ihre Filters.java -Datei konfiguriert haben, wenn Sie es nicht im Root-Paket abgelegt haben.

Dies ist der Eintrag in meinem application.conf , da ich package filters anstelle des Standardpakets verwende.: -

%Vor%     
Nio 19.08.2016, 19:41
quelle
3

Die beste Vorgehensweise besteht darin, sowohl den statischen Kontext als auch den Webservice von einem einzelnen Ursprung aus zu bedienen. Für eine einzelne Domäne ist beispielsweise jeder URI außer / api / * dazu gedacht, statischen Inhalt zu liefern, und / api / * ist ein Reverse-Proxy für die Java-App. Sie sind möglicherweise speziell an Grunt interessiert. Nginx und Apache könnten auch funktionieren.

Zum Beispiel geben Sie in nginx die folgende Konfiguration an:

%Vor%

Und dann führen Sie Ihre Java-App auf localhost auf Port 9000 aus. Sie können Ihren gesamten statischen Inhalt an den nach "root" angegebenen Speicherort kopieren und von nginx bereitgestellt bekommen. Sie senden alle REST-Anforderungen an / api / method / name

Der Vorteil dieser Lösung ist solide Sicherheit und die Fähigkeit, SSL einfach zu konfigurieren.

    
mkorman 16.08.2016 21:31
quelle
0

Wenn nur für Entwicklungszwecke gilt, können Sie versuchen, mit einem Browser-Plugin zu verhindern, dass CORS prüft:

Zum Beispiel überall in Firefox oder Allow-Control-Allow-Origin in Chrome.

In der Produktionsumgebung müssen Sie JS-Assets und -Dienste vom selben Host aus bereitstellen oder den Acces-Control-Allow-Origin-Header mit dem spezifischen Wert für Ihre Services festlegen.

    
Gonzalo Matheu 17.08.2016 02:54
quelle
0

Ich denke, dass benutzerdefinierte Filter Ihr Problem lösen:

%Vor%

und in application.conf

%Vor%

Konfiguration wie folgt:

%Vor%     
pacman 17.08.2016 13:46
quelle
0

Sie zeigen nicht viel von Ihrem Projekt, so dass es schwer zu verstehen ist, was für ein Problem es sein könnte. Ich glaube nicht, dass es hier ein CORS-Problem gibt, da standardmäßig keine Sicherheitsfilter aktiv sind. Sie können hier finden, wie Sie angular und Play integrieren können.

    
asch 17.08.2016 13:59
quelle
0

Im Interesse anderer, die mit dem Front-End- und Lagom-Backend-Projekt Angular 4 arbeiten. Ich habe es geschafft, diesen Weg zu lösen.

* Ich habe diese Zeile in meinem build.sbt sowohl in api als auch impl *

hinzugefügt

libraryDependencies + = Filter

In meinem impl-Verzeichnis habe ich Ordnerfilter erstellt und den Code unter

hinzugefügt %Vor%

In meiner application.conf habe ich den folgenden Code hinzugefügt

%Vor%

Danach habe ich meine Lagom Microservices neu gestartet und es hat wie ein Zauber funktioniert.

    
Ano 20.09.2017 07:06
quelle

Tags und Links