How to enable Cross-domain-Anfragen auf JAX-RS web-services?
Entwickelte ich ein set von restful-web-services. Ich konnte nicht rufen Sie diese Methoden von remote-clients aufgrund der Fehler
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Die Dienstleistungen funktionieren perfekt auf localhost. Gibt es irgendwelche änderungen oder configs zu tun, auf die server-Seite um das Problem zu beheben. d.h. zu aktivieren, cross-domain-requests.
Ich bin mit WildFly 8, Java ee 7
InformationsquelleAutor der Frage Naili | 2014-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Frage mich, die gleiche Sache, also nach ein bisschen recherche fand ich, dass der einfachste Weg war einfach, verwenden Sie eine JAX-RS
ContainerResponseFilter
zum hinzufügen von relevanten CORS-Header. Auf diese Weise müssen Sie nicht brauchen, ersetzen Sie die gesamte web-services-stack CXF (Wildfly verwendet CXF ist eine form, aber es sieht nicht wie er es verwendet für JAX-RS vielleicht nur JAX-WS).Unabhängig, wenn Sie diesen filter verwenden, wird es fügen Sie die Header, um jeden REST webservice.
Dann wenn ich getestet mit curl, die Antwort hatte die CORS-Header:
Mein Verständnis ist, dass es die
@Provider
Anmerkung, erzählt die JAX-RS-Laufzeitumgebung die Verwendung der filter, ohne die annotation geschieht nichts.Bekam ich die Idee, über die Verwendung der
ContainerResponseFilter
aus einer Jersey-Beispiel.InformationsquelleAutor der Antwort Joel Pearson
Ich Stand vor einem ähnlichen problem, und habe versucht, verwenden Sie @Alex Petty ' s Lösungaber abgesehen davon, dass um die CORS-Header auf jede JAX-RS-Endpunkt in meiner Klasse als solche:
Hatte ich um weiter zu definieren, eine catch-all -
OPTIONS
Endpunkt zurückgeben würde die CORS-Header für jede andereOPTIONS
Anfrage in der Klasse und somit fangen alle Endpunkt der Art:Erst danach konnte ich richtig mit meiner JAX-RS-API-Endpunkte von Jquery-Ajax-clients auf anderen domains oder hosts.
InformationsquelleAutor der Antwort nemesisfixx
Ich fand eine noch einfachere (RestEasy-spezifische) Methode zum aktivieren CORS auf Wildfly, ohne einen filter und wo Sie kontrollieren können, Ihre APIs-Antwort-header-Konfiguration auf der Ressourcenebene.
Beispiel:
InformationsquelleAutor der Antwort Alex Petty
Habe ich Glück gehabt, konfigurieren von Cross-origin resource sharing (CORS) für meine API (Wildfly), die durch die Nutzung dieser lib:
Es ist sehr einfach einzurichten. Fügen Sie einfach die oben genannten Abhängigkeit zu Ihrem pom und fügen Sie die folgende config in die webapp Abschnitt Ihrer web.xml Datei.
Können Sie auch so konfigurieren, dass es mit einer properties-Datei statt, wenn Sie bevorzugen. Diese lib funktioniert wie ein Charme und gibt Ihnen eine Menge Flexibilität bei der Konfiguration!
InformationsquelleAutor der Antwort Alex Petty
Keiner der anderen Antworten, die für mich gearbeitet, aber das Tat:
import javax.ws.rs.core.Response;
Dann ändern Sie den Rückgabetyp der service-Methode
Response
und ändern Sie diereturn
Anweisung:Wo
resp
ist die ursprüngliche response-Objekt.InformationsquelleAutor der Antwort Alex R
Können Sie auch umsetzen
javax.ws.rs.core.Feature
wie unten zu implementieren CORS.InformationsquelleAutor der Antwort Ranuka
Nur um etwas auf andere Antworten.
Ermöglichen * ist ein wenig gefährlich.
Was getan werden kann, ist die Konfiguration einer Datenbank für die zulässige Herkunft (es kann eine Datei)
Dann, wenn die Anfrage kommen, die Sie tun können:
In dieser Weise werden Sie nicht jedem erlauben.
InformationsquelleAutor der Antwort Geoffrey
@Joel Pearson Antwort geholfen, aber für jemanden der neu in der JAX-RS, so wie ich und läuft der service auf den tomcat konfigurieren web.xml sollten vorsichtig sein beim anlegen der Klasse und legt es irgendwo im Projekt. Finden Sie das Paket, das Sie angegeben unter für jersey und die Erstellung dieser filter Klasse dort. So hat es bei mir geklappt.
InformationsquelleAutor der Antwort Novice_JS