我希望能够在我的本地主机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组件,我不知道......)允许跨域请求?
您需要在端点上添加注释
@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使用提供者标签来查找这个注释。
<cxf:rsServer id="login" address="your adress"
serviceClass="LoginEndpoint">
<cxf:providers>
<bean class="org.apache.cxf.jaxrs.cors.CrossOriginResourceSharingFilter" />
</cxf:providers>
</cxf:rsServer>
然后你应该没问题(但请记住,这只是为了本地测试)。
如果您使用的是 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 和其他参数。