Cross domain 驼峰JAX-RS和跨域请求

Cross domain 驼峰JAX-RS和跨域请求,cross-domain,cxf,jax-rs,apache-camel,cxfrs,Cross Domain,Cxf,Jax Rs,Apache Camel,Cxfrs,我希望能够在本地主机Camel实例上执行HTTP请求(仅出于开发目的,我知道这是一种糟糕的做法)。就目前而言,我一直坚持: Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin. 我已经搜索了如何告诉Camel允许这样的请求,但没有找到答案。我正在使用camel cxf和rsServer来创建端点 我有一个端点,看起来像这样: 公共类登录点{ @得到 @路径(登录) @产生(MediaType.A

我希望能够在本地主机Camel实例上执行HTTP请求(仅出于开发目的,我知道这是一种糟糕的做法)。就目前而言,我一直坚持:

 Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin.
我已经搜索了如何告诉Camel允许这样的请求,但没有找到答案。我正在使用camel cxf和rsServer来创建端点

我有一个端点,看起来像这样:

公共类登录点{
@得到
@路径(登录)
@产生(MediaType.APPLICATION_JSON)
公共客户登录(@QueryParam(“电子邮件”)字符串电子邮件,@QueryParam(“密码”)字符串密码){
返回null;
}
}
而不是一条标准路线


我如何告诉Camel(或JAX-RS,或CXFRS组件,我不知道…)允许跨域请求?

您需要在端点上添加注释

@CrossOriginResourceSharing(allowAllOrigins=true,allowAnyHeaders=true)
公共类登录点{
@得到
@路径(登录)
@产生(MediaType.APPLICATION_JSON)
公共客户登录(@QueryParam(“电子邮件”)字符串电子邮件,@QueryParam(“密码”)字符串密码){
返回null;
}
}
我认为您不需要新的依赖项,因为注释在camel cxf中。但是您需要告诉Camel使用providers标记查找此注释



然后您应该会很好(但请记住这只是用于本地测试)。

如果您使用的是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>

有关更多安全性,请参见上述注释中的allowOrigins和其他参数。

其中的Java代码和JAX-RS注释与访问控制无关。它工作得很好,谢谢!我相信这会让别人失望的
allowAllOrigins=true
对于测试很好,但缺乏安全性。在生产中,您应该使用
allowOrigins={”http://your.domain.com“}
在较新的Camel版本中,注释不再是Camel cxf的一部分。您必须添加
org.apache.cxf:cxf-rt-rs-security-cors:3.1.8
。此外,类移动到
org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter
@CrossOriginResourceSharing(allowAllOrigins = true)
public class APIController {

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