【发布时间】:2014-02-13 21:55:42
【问题描述】:
我在我的主操作系统(Windows7 Pro)上运行了一个 Java 服务,我可以通过http://localhost:8080/... 的浏览器访问它。它返回有效的 JSON 响应。
我还有一个用angularjs 编写的SPA,它位于我的虚拟机上,我为它创建了一个虚拟主机(为了更舒适的访问)。虚拟机操作系统为 Ubuntu Server 12.04.X LTS。
由于这些环境在网络方面彼此分离,因此我试图通过我的本地计算机 IP 地址X.X.X.X:8080 访问 Java 服务(通过终端 ping 确实发送了响应)。由于正常的$http 使用不起作用,我尝试了此答案How to load a cross-domain JSON with $http in angularjs 1.0.8 as it does with 1.2.0 中建议的解决方案,但要么它太旧,要么有其他问题,但是当我尝试做同样的事情时它就不起作用。在控制台中,我只看到以下内容
XMLHttpRequest cannot load http://X.X.X.X:8080/library/api/books. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://dev.xxx' is therefore not allowed access.
【问题讨论】:
-
您需要在您的 java 服务上启用跨源资源共享 (CORS)。
-
尝试启用它,正如这里 cxf.apache.org/docs/jax-rs-cors.html 所解释的那样,但无论如何都没有帮助。
-
确保您已将 CORS 拦截器添加到您的 jax-rs 服务器。如果您完全按照 Apache CXF 说明进行操作,CORS 就可以工作。
标签: java angularjs jetty embedded-jetty