2015-09-09 102 views
1

有人可以告诉我为什么我会收到这些错误。Swagger UI上的CORS问题

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. 

我试图在端口运行扬鞭UI说9090和9000扬鞭API文档,并试图在UI中显示的文档。

我已经在API文档服务器(端口9000)上添加了CORS过滤器,如下所示。

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

在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 

这里是我如何在服务器上设置CORS

 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); 
+0

你可能想在http://enable-cors.org/或http://www.html5rocks.com/en/了解更多关于CORS tutorials/cors/ – Marged

+0

我确定你的Firefox有版本? ;-)请使用Firefox的F工具创建网络跟踪并向我们显示标题 – Marged

+0

因此,您的设置不会导致设置正确的标题。你能看到另一个实例上的这些头文件吗?也许你把他们放在了错误的地方。 – Marged

回答

1

你用json文件做了些什么时髦吗?

我遇到了同样的错误,试图修改我的JSON文件并查看Chrome上的更改。确保json本身不会破坏,额外的括号,逗号等等。我从swagger现场演示中的示例json开始从头开始,我很好。我知道这是一项任务,但为我工作,至少加载了UI!

您也可以通过去招摇UI自述,CORS support section

+0

我原来是一个腐败的JSON文件,我正在使用前夕招摇并不是使用默认/ api文档JSON文件我用了一个测试其中有额外的字符。谢谢(你的)信息! – ShahNewazKhan