CORS-Problem auf Swagger-UI
Kann mir jemand sagen, warum bekomme ich diese Fehler.
GET http://127.0.0.1:9000/api-docs/service.json
200 OK 4ms swagger-ui.js (line 30261)
Unable to Load SwaggerUI /api-docs/(line 83)
Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource at http://127.0.0.1:9000/api-
docs/service.json. This can be fixed by moving the resource to the
same domain or enabling CORS.
uncaught exception: Can't read from server. It may not have the
appropriate access-control-origin settings.
Ich versuche zu laufen Swagger-UI-port sagen 9090 und Fors-API-Dokumentation unter 9000 und versuchen zum anzeigen der Dokumentation auf der Benutzeroberfläche.
Habe ich die CORS-filter auf die API-Dokumentation server (port 9000) wie folgt.
FilterHolder cors = swaggerUIContext.addFilter(CrossOriginFilter.class,"/*",EnumSet.of(DispatcherTyp e.REQUEST));
cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
cors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "");
cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD");
cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "Content-Type, api_key, Authorization");
Die Request-und Response-Header im firefox V33.0
Response Headers
Content-Length 428
Content-Type application/json
Request Headers
Accept application/json;charset=utf-8,*/*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
Host localhost:9000
Origin http://localhost:9090
Referer http://localhost:9090/api-docs/
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0)
Gecko/20100101 Firefox/33.0
Hier ist, wie ich bin Einstellung der CORS auf dem server
final ResourceHandler swaggerUIResourceHandler = new ResourceHandler();
swaggerUIResourceHandler.setResourceBase("target/classes/api-docs");
final ServletContextHandler swaggerUIContext = new ServletContextHandler();
swaggerUIContext.setContextPath("/api-docs");
swaggerUIContext.setHandler(swaggerUIResourceHandler);
FilterHolder cors = swaggerUIContext.addFilter(CrossOriginFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));
cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
cors.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD");
cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "Content-Type, api_key, Authorization");
ServletHolder def = new ServletHolder("default", DefaultServlet.class);
def.setInitParameter("resourceBase","./http/");
def.setInitParameter("dirAllowed","false");
swaggerUIContext.addServlet(def,"/");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { swaggerUIContext, new DefaultHandler() });
server.setHandler(handlers);
möchten Sie vielleicht Lesen Sie mehr über CORS in enable-cors.org oder html5rocks.com/en/tutorials/cors
Ich bin sicher, dass Ihr Firefox hat eine version ? 😉 Bitte erstellen Sie ein Netzwerk-trace mit Hilfe der F-tools von Firefox und zeigt uns den Header
Also dein setup ist nicht die Ursache der richtige Header gesetzt werden. Sehen Sie diese Header auf die andere Instanz ? Vielleicht setzen Sie Sie an der falschen Stelle.
Leider nicht, ich weiß ein wenig über CORS und deswegen habe ich versucht, um Sie in die richtige Richtung. Aber ich weiß nicht, Stolzieren, so brauchen wir jemanden, um deine Frage Lesen, die enthält mehr relevante Informationen
Versuchen Sie
Ich bin sicher, dass Ihr Firefox hat eine version ? 😉 Bitte erstellen Sie ein Netzwerk-trace mit Hilfe der F-tools von Firefox und zeigt uns den Header
Also dein setup ist nicht die Ursache der richtige Header gesetzt werden. Sehen Sie diese Header auf die andere Instanz ? Vielleicht setzen Sie Sie an der falschen Stelle.
Leider nicht, ich weiß ein wenig über CORS und deswegen habe ich versucht, um Sie in die richtige Richtung. Aber ich weiß nicht, Stolzieren, so brauchen wir jemanden, um deine Frage Lesen, die enthält mehr relevante Informationen
Versuchen Sie
OPTIONS
zu der Liste der erlaubten Methoden. Auch, was die Ausgabe von curl -I http://127.0.0.1:9000/api-docs/service.json
?InformationsquelleAutor Yahiya | 2015-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du etwas funky mit der json-Datei?
Ich Stand vor dem gleichen Fehler, wenn Sie versuchen zu ändern, meine JSON-Datei und sehen die änderungen in Chrome. Sicherstellen, dass die json-sich nicht brechen irgendwie eine zusätzliche Klammer, Komma und so weiter. Ich fing von vorne an mit der man die json-Beispiel aus der Fors live-demo und ich war in Ordnung. Ich weiß, es ist eine Aufgabe, aber für mich gearbeitet, wenigstens das UI geladen!
Können Sie auch durch die swagger-ui readme, Mit CORS-support-Bereich
InformationsquelleAutor sanchita
War ich in der Lage, um es arbeiten, indem Sie die folgende Methode, um meine Anwendung. Hinweis: dies eröffnet auch die API, so dass man annehmen kann, CrossOrigin Anfragen. Die details des
addMapping()
bit sind bis zu Ihnen, aber dieses Beispiel öffnet alles, von überall. Hier ist die vollständige Klasse.InformationsquelleAutor Shane
Wenn Sie mit Spring Security
fügen Sie bitte diesen code.
Erklärung:
In der oben CorsConfiguration Klasse bin ich mit zwei Methoden.
cors.applyPermitDefaultValues();
cors.setAllowedMethods(Liste der Request-Typ, name);
Diese Methode cors.applyPermitDefaultValues(); wird ermöglichen cross-origin-Anfrage für alle hosts.
In der Regel diese Methode unterstützen cross-origin-support für diese 3 Art der Anfrage-Methoden GET,HEAD und PUT.
Wenn Ihr die API auszusetzen, PUT , DELETE oder andere request-Methoden. Dann müssen Sie überschreiben, indem Sie diese cors.setAllowedMethods();
Können Sie bitte überprüfen Sie jetzt, ob das genug ist..?
Ja, das sieht viel besser aus. Beachten Sie, dass Sie können auch schreiben Sie keywords wie Funktionen im code, indem Sie zwischen `. Zum Beispiel so Aussehen wie
cors.applyPermitDefaultValues();
.Danke..!! Ich bin Neuling auf stack overflow. Dies wird mir helfen.
InformationsquelleAutor gnana jeyam95
Habe ich nur begegnen, was übrigens ein ähnliches problem: Swagger UI: HTTP Content-type "application/json" Ursachen "kann Nicht Geladen SwaggerUI".
Versuchen Sie, durch verändern der HTTP-Content-type-header von Ihr BEKOMMEN service.json-Antwort vom "application/json" , "text/html", oder sogar, es zu entfernen. Ich weiß nicht warum, aber es scheint, macht es einen Unterschied für Swagger-UI.
InformationsquelleAutor Xavier Lamorlette
Ich hatte auch dieses Problem und nach der Besichtigung der Header in der pet-store-Beispiel habe ich gefunden, dass "Access-Control-Allow-Headers" muss "Content-Type", api_key, Authorization".
Stellen Sie sicher, dass Sie api_key so gut wie ich hatte, fehlt.
InformationsquelleAutor Jaco Van Niekerk