2

我有一个球衣服务器正在运行。直接从浏览器运行时,我得到正确的响应。但是,当我尝试从 angular.js 的 $resource 访问其余服务时,我在尝试访问正确的 url 时在控制台中收到以下错误。我尝试在线阅读所有材料,例如http://simplapi.wordpress.com/2013/04/10/jersey-jax-rs-implements-a-cross-domain-filter/来设置 CORS 过滤器,但是该指南似乎过时且晦涩难懂。(我使用最新的球衣实现)。

无法加载资源:Access-Control-Allow-Origin 不允许 Origin localhost:63342。

使我需要的数据在球衣中可用的方法。

  @Path("/id/{id}")
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public boolean validateSSN(@PathParam("id") String id) {
      IdValidator idv = new IdValidator(id);
      return idv.Validate();
  }

angular.js 中的访问器方法:

services.factory('ReplyFactory', function ($resource) {
console.log("test");
return $resource(baseUrl + '/myproject/api/validate/id/:id', {id: '@id'},
    {'get': { method: 'GET' }});

});

4

1 回答 1

1

那么您需要做的是确保来自您的资源的所有响应都具有以下 http 标头:

  • Access-Control-Allow-Origin- 指定应接受来自哪些来源的请求(在您的情况下为 localhost:63342)
  • Access-Control-Allow-Headers- 指定允许通过 CORS 使用哪些标头
  • Access-Control-Allow-Methods- 指定允许通过 CORS 使用哪些方法

还有其他标题,例如Access-Control-Allow-Credentials等等。

因此,您只需在Access-Control-Allow-Origin回复中至少添加标题即可。如何做到这一点取决于您的环境。

您可以在每个资源上手动定义这些标题

您可以定义 Jersey 过滤器以将 CORS 标头添加到所有响应

您可以使用 servlet 过滤器将 CORS 标头添加到所有响应

TomcatJetty也有具体的解决方案

有很多方法可以做到这一点,但所有这些都是关于同一件事 - 您只需在服务器响应中添加一个额外的标头。

于 2013-10-10T13:07:40.983 回答