Camel JAX-RS и междоменный запрос
Я хотел бы иметь возможность выполнять HTTP-запросы на своем экземпляре localhost Camel (просто для целей разработки, я знаю, что это плохая практика). На данный момент я застрял с:
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 ответа
Вам нужно добавить аннотацию на вашу конечную точку
@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 и другие параметры в аннотации выше.