通过路由传递查询参数

时间:2015-10-10 09:23:10

标签: spring rest http apache-camel

骆驼学习者。是否能够存储传入的查询参数并为各种路径设置各种标题/查询参数? 我想用身份验证选项构建类似代理的服务。示例:
1)我在http://foo.bar/path?login=admin&password=admin&action=delete上收到了一封HTTP 2)然后我想使用一些<to uri="direct:auth"/>http://auth.foo.bar/login?login=admin&password=admin发送请求并接收身份验证令牌作为答案
3)然后,使用令牌执行操作:转到http://action.foo.bar/perform?authToken=sometoken&action=delete

最后 - 在转到auth路线之前是否有“切断”“行动”参数的选项,然后在前往action之前追加它。感谢。

1 个答案:

答案 0 :(得分:1)

您希望使用Camel Jetty component接收HTTP请求,并Camel HTTP4 component向其他网络服务发出请求。

Jetty组件将从客户端的调用中获取查询参数,并将它们放在IN交换的标题中,其名称与HTTP查询中的名称完全相同。

然后,您可以通过设置&#34; CamelHttpQuery&#34;设置用于其他HTTP调用的查询参数。 header(Exchange.HTTP_QUERY是该字符串的静态最终变量)。下面我使用了简单的语言camel提供,它允许您将标题和正文放入可用于设置标题的字符串中。 http呼叫的响应将在交换机构中设置。

例如:

from("jetty:http://0.0.0.0:1234/path")
    .setHeader(Exchange.HTTP_QUERY,  simple("?login=${header.login}&password=${header.password}"))
    .to("http4://auth.foo.bar/login")
    .setHeader("authToken", simple("${body}")) //assuming just the token is in the response body
    .setBody("")
    .setHeader(Exchange.HTTP_QUERY,  simple("?authToken=${header.authToken}&action=${header.action}"))
    .to("http4://action.foo.bar/perform");

这是一个简单的示例,但显示了标头和响应的放置位置。您可能希望将一些标题设置和响应处理包装到Camel处理器中,如果它不容易使路由易于阅读。

进一步回应:

要过滤发送到http端点的标头,请在spring bean定义中创建org.apache.camel.spi.HeaderFilterStrategy的实例,并将其添加到.to(&#34; http://auth.foo.bar/?headerFilterStrategy=authHeaderFilterImpl&# 34;)像这样。 (这是来自http4页面)

我建议使用http4的原因是它可以更加自定义,但如果你能从http4找到你需要的等效功能,可以随意使用码头。

但是从阅读有关暴露POST请求功能的内容来看,它听起来像auth端点更像是一个&#34; rich&#34;企业整合模式。查看camel-enricher,它允许您点击另一个端点,然后将响应聚合到原始交换(如果您使用的是camel 2.15或更低,则使用带聚合策略的收件人列表)。

否则,您可以将原始帖子请求正文存储在标题中,然后稍后将其用于实际操作调用。

相关问题