JAX-RS (jersey) -> Angular.js 通过 REST

Posted

技术标签:

【中文标题】JAX-RS (jersey) -> Angular.js 通过 REST【英文标题】:JAX-RS (jersey) -> Angular.js via REST 【发布时间】:2013-10-18 03:15:49 【问题描述】:

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

加载资源失败:Origin localhost:63342 is not allowed 通过访问控制允许来源。

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

  @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' );

);

【问题讨论】:

【参考方案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 标头即可。如何做到这一点取决于您的环境。

你可以manually define those headers on each resource。

您可以define Jersey filter 将 CORS 标头添加到所有响应中

您可以use servlet filter 将 CORS 标头添加到所有响应中

Tomcat和Jetty也有具体的解决方案

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

【讨论】:

以上是关于JAX-RS (jersey) -> Angular.js 通过 REST的主要内容,如果未能解决你的问题,请参考以下文章

springboot 之 JAX-RS 和 Jersey

如何使用 JAX-RS 和 Jersey 处理 CORS

Jersey / JAX-RS ExceptionMapper MySQL

如何使用JAX-RS和Jersey处理CORS

JAX-RS (Jersey 2) - 使用 JSR 250 注释的授权

你能用 JAX-RS/Jersey 做传统的 Servlet 过滤吗?