java - 集成 Apache Camel CXF-RS + CXF Jax-RS OAuth

标签 java rest oauth apache-camel cxfrs

我将 Apache Camel 与 CXF-RS 结合使用,使用 Camel 提供的标准集成(在可执行 JAR 中使用嵌入式 Jetty),并且它工作得很好。

我想向我的 REST 服务器添加 OAuth 支持(作为 OAuth 1 提供程序),因为我已经在使用 CXF,所以我计划在其上使用 CXF JAX-RS OAuth 集成:http://cxf.apache.org/docs/jax-rs-oauth.html

不幸的是,我似乎需要使用 servlet 来支持 OAuth,并且我很难在调用 Camel 处理器之前添加它。由于我的路线定义为:

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

从处理器的角度(restProcessor),我无法从 Exchange 对象获取 HttpServletRequest 和 HttpServletResponse,cxfrs 路由没有给我正确的主体:

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

这两个命令返回 null:cxfrs 与经典的 Camel HTTP 路由不同。

有没有办法配置 Camel 路由,在使用 cxfrs 路由之前添加 servlet 过滤器(CXF JAX-RS OAuth 给出的 OAuthServletFilter)?

我看到的另一种方法是检查 CXF JAX-RS OAuth 的来源:AbstractAuthFilter.java 类包含 OAuth 所需检查的实现,但如果可能的话,我不希望 fork 此类的一部分,并且需要我手动检查来自 Camel 给出的交换对象的 HTTP header /值。我相信应该有更好的方法来做到这一点,但也许我错了。

最佳答案

我终于让它干净地工作了:我不使用“cxfrs:http...”路由,而是使用“cxfrs:bean:rsServer...”路由。

它使我能够在 Spring 中定义一个 CXFRS 服务器 bean,我可以在其中添加 OAuthRequestFilter。 然后我在我的 Camel route 引用它并且它有效!

关于java - 集成 Apache Camel CXF-RS + CXF Jax-RS OAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20117547/

相关文章:

java - containarized shinyproxy 非常慢

java - Android: "No such instance field"使用改造入队

Tizen 可穿戴 SDK 中的 REST API

python - 在 Django-rest-framework 中编写一个可以访问 validatated_data 的验证器类

php - LinkedIn 获取 token 返回 HTTP 1.1 400 - 错误请求错误

java - 在Java中,如何从后到前迭代文本文件中的行

java - 使用 Scanner 类读取扫描仪字符串

ios - Square API + iOS : OAuth not working?

rest - 为什么我们更喜欢 Authorization Header 向服务器发送承载 token 而不是 URL 编码等其他技术

java - 如何从HashMap中获取玩家列表