骆驼学习者。是否能够存储传入的查询参数并为各种路径设置各种标题/查询参数?
我想用身份验证选项构建类似代理的服务。示例:
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
之前追加它。感谢。
答案 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或更低,则使用带聚合策略的收件人列表)。
否则,您可以将原始帖子请求正文存储在标题中,然后稍后将其用于实际操作调用。