3

我希望能够在我的本地 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 组件,我不知道......)允许跨域请求?

4

2 回答 2

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 中。但是您需要使用 providers 标签告诉 Camel 查找此注释。

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

那么你应该没问题(但请记住,这仅用于本地测试)。

于 2012-09-21T08:29:06.090 回答
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 和其他参数。

于 2016-12-26T14:08:04.393 回答