2013-11-21 4 views
1

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

Я хочу, чтобы добавить поддержку 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.

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

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

ответ

1

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

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

+4

Почему бы не опубликовать окончательную конфигурацию, которая также работала? Было бы полезно ... – kaqqao

Смежные вопросы