Camel JAX-RS和跨域请求

时间:2012-09-21 08:18:51

标签: cross-domain cxf jax-rs apache-camel cxfrs

我希望能够在我的localhost Camel实例上执行HTTP请求(仅用于开发目的,我知道这是不好的做法)。现在,我坚持:

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

我搜索了如何告诉Camel允许此类请求,但没有找到答案。我正在使用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;
    }
}

比标准路线正在做这项工作。

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

2 个答案:

答案 0 :(得分: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;
    }
}

我认为你不需要新的依赖,因为注释是在camel-cxf中。但是你需要告诉Camel使用providers标签查找这个注释。

<cxf:rsServer id="login" address="your adress"
        serviceClass="LoginEndpoint">
    <cxf:providers>
        <bean class="org.apache.cxf.jaxrs.cors.CrossOriginResourceSharingFilter" />
    </cxf:providers>
</cxf:rsServer>

然后你应该没问题(但请记住,这只是为了本地测试)。

答案 1 :(得分: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>

和REST

@CrossOriginResourceSharing(allowAllOrigins = true)
public class APIController {

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

为了更加安全,请参阅上面注释中的allowOrigins和其他参数。