2013-10-10 72 views
2

我有一個球衣服務器啓動並運行。當直接從瀏覽器運行時,我會得到正確的響應。但是,當我嘗試從angular.js的$資源訪問其餘服務時,在嘗試訪問正確的URL時,控制檯中出現以下錯誤。我試圖在線閱讀所有材料,例如http://simplapi.wordpress.com/2013/04/10/jersey-jax-rs-implements-a-cross-domain-filter/以設置CORS過濾器,但該指南似乎過時並且含糊不清。 (即時通訊使用球衣的最新實現)。JAX-RS(球衣) - >通過REST的Angular.js

加載資源失敗:原始本地主機:63342不允許使用 通過Access-Control-Allow-Origin。

使我需要的數據在球衣中可用的方法。在angular.js

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

存取方法:

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 - 指定從其起源請求應被接受(本地主機: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標頭添加到所有響應

有用於TomcatJetty

有很多方法如何還具體解決方案做到這一點,但所有這一切都是一樣的 - 你只需在你的服務器響應中添加一個額外的頭文件。