【问题标题】:Integrating Apache Camel CXF-RS + CXF Jax-RS OAuth集成 Apache Camel CXF-RS + CXF Jax-RS OAuth
【发布时间】:2013-11-21 09:53:49
【问题描述】:

我正在使用 Apache Camel 和 CXF-RS,使用 Camel 提供的标准集成(在可执行 JAR 中使用嵌入式 Jetty),它运行良好。

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

不幸的是,我似乎需要使用 servlet 来支持 OAuth 并且我正在努力在调用我的骆驼处理器之前添加它。因为我的路线由以下定义:

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 Route,在使用 cxfrs 路由之前添加一个 servlet 过滤器(OAuthServletFilter 由 CXF JAX-RS OAuth 提供)?

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

【问题讨论】:

    标签: java rest oauth apache-camel cxfrs


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2014-09-11
      • 1970-01-01
      相关资源
      最近更新 更多