gpt4 book ai didi

rest - WSO2 突触 : setting a URL parameter

转载 作者:行者123 更新时间:2023-12-04 23:10:36 26 4
gpt4 key购买 nike

我正在尝试做一些看似简单但无法实现的事情。基本上我希望 WSO2 API 管理器将 URL 参数添加到 REST 调用。

设置和问题

我安装了 WSO2 API 管理器。我还有一个 Tomcat 运行着一个名为 someservlet 的伪造 servlet,它只记录它接收到的任何内容并返回正常。我已将 servlet 作为 API 添加到管理器中,因此我可以直接或通过 WSO2 API mgr 调用 servlet。

我能跑

curl http://localhost:8080/someservlet/servlet/toto?blob=blib&secret=pass

servlet 工作正常,它告诉我它收到了路径 /toto 和参数 blobsecret

我能跑

curl -H "Authorization: Bearer [...]" --url "http://192.168.23.1:8280/someservlet/1.0/toto?blob=blib&secret=pass"

它做的完全一样。到目前为止,还不错。

我想要的是运行:

curl -H "Authorization: Bearer MqVQuHqLNphtPV3XF1CtXVmbyP8a" --url "http://192.168.23.1:8280/someservlet/1.0/toto?blob=blib"

(注意我已经删除了secret参数)

...仍然得到相同的结果。

所以基本上我希望 API 管理器添加 URL 参数 secret=pass

我尝试的第一件事:属性(property)中介

使用具有属性 REST_URL_POSTFIX 的 Synapse XML 配置。

我编辑了 API 配置文件,并添加了

<property name="REST_URL_POSTFIX" value="/blob?toto=titi" scope="axis2" type="STRING"/>

现在如果我跑

curl -H "Authorization: Bearer [...]" --url "http://192.168.23.1:8280/someservlet/1.0/toti?blab=blib&secret=puss"

就好像我运行了 someservlet/1.0/blob?toto=titi:我所有的路径和参数都消失了,并被配置的替换了。嘿,这就是它应该工作的方式,不是吗!

问题:

  1. 这不会向 URL 添加任何内容,它会设置 URL 后缀,这意味着现有参数会消失(在上面的示例中,blab=blib)
  2. 它必须以 "/" 开头才能成为有效值,所以我不能只添加 &secret=pass(当然,因为问题 1 ,这无论如何都没用)

所以基本上这并不能让我附加最后的 &secret=pass

我尝试的第二件事:重写 URL 中介

我找到了这个中介,虽然它可能不会成功,但这是一个很好的线索:我可以用 secret=foo 调用,然后让中介用 替换它>secret=pass.

我把它放在配置文件中:

<rewrite>
<rewriterule>
<action type="replace" value="pass" fragment="query" regex="foo"/>
</rewriterule>
</rewrite>

这行不通。起初我以为我没有正确的 Action 参数。但是错误信息是:

Malformed URL when processing /someservlet/1.0/toti?blab=blib&amp;secret=foo

畸形?异常堆栈跟踪中有更多详细信息:

java.net.MalformedURLException: no protocol: /someservlet/1.0/toti?blab=blib&secret=foo

现在发生的事情是中介(记录或重写)收到一条消息,其“收件人:”字段指向一个没有协议(protocol)的 URL!

当然,我一直在谷歌搜索,在某些情况下我发现其他人有 logMediator: To:/blabla,在其他(大多数)情况下他们有 logMediator :至:http://blabla。我真的不明白是什么导致了差异。 :-(

所以这就是我被困的地方!! :-(

要尝试的选项

我知道可能有一个应该有效的大锤解决方案:

  1. 使用property存储完整路径和所有参数
  2. 实现我自己的中介(例如在 Java 中)来修改这些参数
  3. 使用属性 REST_URL_POSTFIX 将修改后的后缀放在调用上

不过我觉得这个问题应该有更简单的解决方法。

我有一种希望,有人会给我指出一个我没有找到的简单资源(调解器、样本、语法错误等),而这正是我想要的。乐观……:-)

感谢阅读。有什么想法吗?

最佳答案

据我所知,您正在尝试将 secret=pass 附加到您的端点 url。当您调用 API 时,我相信您正在发送该参数。同时你也发送 "blab=blib" 参数。但在 ESB 中,您需要将其更改为 "toto=titi"

您使用的方法是正确的。(即:使用属性REST_URL_POSTFIX)在这种情况下,它将替换所有请求参数。但在使用之前,您可以保存请求参数并使用 "REST_URL_POSTFIX"您可以获得所需的最终 REST 网址。 (是的,这是您提到的“待尝试”的最终选择)在“收件人”地址中,端口号后只有地址。如果您使用 ""POST_TO_URI" 属性,yopu 将在日志中看到完整的地址 URL,但如果在 BE 服务和 ESB 之间配置了任何代理服务器,我们将使用它

关于rest - WSO2 突触 : setting a URL parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14523977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com