2012-09-21 159 views
3

我想能夠在我的本地主機駱駝實例(僅用於開發目的,我知道這是不好的做法)做HTTP請求。現在,我堅持:駱駝JAX-RS和跨域請求

Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin. 

我已經搜索我怎麼能告訴駱駝允許這樣的請求,但沒有找到答案。我使用camel-cxf和rsServer來創建我的端點。

我有一個端點看起來就像是:

public class LoginEndpoint { 
    @GET 
    @Path(LOGIN) 
    @Produces(MediaType.APPLICATION_JSON) 
    public Customer login(@QueryParam("email") String email, @QueryParam("password") String password) { 
     return null; 
    } 
} 

比標準路由做的工作。

如何告訴駱駝(或JAX-RS或CXFRS組件,我不知道...)允許跨域請求?

+1

其中的Java代碼和JAX-RS註釋與訪問控制無關。 – 2012-09-21 08:22:49

回答

6

您需要在您的端點

@CrossOriginResourceSharing(allowAllOrigins = true, allowAnyHeaders = true) 
public class LoginEndpoint { 
    @GET 
    @Path(LOGIN) 
    @Produces(MediaType.APPLICATION_JSON) 
    public Customer login(@QueryParam("email") String email, @QueryParam("password") String password) { 
     return null; 
    } 
} 

添加註釋,我不認爲你需要一個新的依賴,作爲註釋是駱駝CXF。但是你需要告訴Camel使用providers標籤來查找這個註解。

​​

然後,你應該沒問題(但要記住,這只是本地測試)。

+0

這很好,謝謝你!我相信那會希望別人! –

+1

'allowAllOrigins = true'很適合測試,但缺乏安全性。在生產中,您應該使用'allowOrigins = {「http://your.domain.com」}' – Pith

+0

在較新的Camel版本中,註釋不再是camel-cxf的一部分。你必須添加'org.apache.cxf:cxf-rt-rs-security-cors:3.1.8'。此外,該類移至'org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter'。 – Achim

0

如果您使用的是CXF 3.1.9,則可以在cxf-rt-rs-security-cors jar中找到它。

<jaxrs:server id="apiRS" address="/api"> 
    <jaxrs:serviceBeans> 
      <bean class="com.ak.util.APIRSController"></bean> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter" /> 
    </jaxrs:providers> 
</jaxrs:server> 

和休息

@CrossOriginResourceSharing(allowAllOrigins = true) 
public class APIController { 

    @GET 
    @Path("/status") 
    public String status() { 
     return "{\"Result\":\"OK\"}"; 
    } 
} 

爲了增強安全性看allowOrigins等參數在上面批註。