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 и другие параметры в аннотации выше.

Другие вопросы по тегам