Интеграция Apache Camel CXF-RS + CXF Jax-RS OAuth

Я использую Apache Camel с CXF-RS, используя стандартную интеграцию, предоставляемую Camel (с использованием встроенной Jetty в исполняемом JAR), и она отлично работает.

Я хочу добавить поддержку OAuth (в качестве поставщика OAuth 1) на свой сервер REST, поскольку я уже использую CXF, я планирую использовать на нем интеграцию CXF JAX-RS OAuth: http://cxf.apache.org/docs/jax-rs-oauth.html

К сожалению, мне кажется, что мне нужно использовать сервлет для поддержки OAuth, и я изо всех сил пытаюсь добавить его перед вызовом моего процессора Camel. Поскольку мой маршрут определяется:

String CONTEXT = "?resourceClasses=" + MyServiceResource.class.getName();
final String cxfRSEndpointUri = "cxfrs://http://" + restServerUrl + ":" + restServerPort + CONTEXT;
from(cxfRSEndpointUri).process(restProcessor);

С точки зрения процессора (restProcessor) я не могу получить HttpServletRequest и HttpServletResponse из объекта Exchange, маршрут cxfrs не дает мне правильных тел:

final HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
final HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class);

Эти две команды возвращают значение null: cxfrs не похож на классический HTTP-маршрут Camel.

Есть ли способ настроить Camel Route, который бы добавил фильтр сервлетов (OAuthServletFilter, предоставленный CXF JAX-RS OAuth) перед использованием маршрута cxfrs?

Другой способ, который я вижу, - это проверить источники CXF JAX-RS OAuth: класс AbstractAuthFilter.java содержит реализацию проверок, необходимых для OAuth, но, если возможно, я предпочитаю не форкнуть часть этого класса, и для этого потребуется мне, чтобы проверить заголовки / значения HTTP из объекта обмена, предоставленного верблюдом, вручную. Я считаю, что должен быть лучший способ сделать это, но, возможно, я ошибаюсь.


person zenbeni    schedule 21.11.2013    source источник


Ответы (1)


Наконец-то я заставил его работать чисто: я использую не маршрут «cxfrs: http ...», а маршрут «cxfrs: bean: rsServer ...».

Это позволяет мне определить в Spring серверный компонент CXFRS, в который я могу добавить к нему OAuthRequestFilter. Затем я ссылаюсь на него в моем маршруте Camel, и он работает!

person zenbeni    schedule 21.11.2013