我正在尝试做一些看似简单但无法使其发挥作用的事情。基本上我希望 WSO2 API 管理器向 REST 调用添加 URL 参数。
设置和问题
我安装了 WSO2 API 管理器。我还有一个 Tomcat 运行着一个名为一些servlet它只是记录它收到的任何内容并返回正常。我已将 servlet 添加为管理器中的 API,因此我可以直接调用 servlet 或通过 WSO2 API mgr 调用该 servlet。
我可以跑
curl http://localhost:8080/someservlet/servlet/toto?blob=blib&secret=pass
servlet 工作正常,它告诉我它已收到路径/toto和参数blob and secret.
我可以跑
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 参数秘密=通行证.
我尝试的第一件事:财产调解员
使用 Synapse XML 配置属性 REST_URL_POSTFIX.
我编辑了 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:我的所有路径和参数都消失了,并被配置的路径和参数替换。嘿,这就是它应该如何工作,不是吗!
问题:
- 这不会向 URL 添加任何内容,它会设置 URL 后缀,这意味着现有参数会消失(在上面的示例中,喋喋不休=blib)
- 它必须从一个开始"/"是一个有效的值,所以我不能只添加&秘密=通过(当然,因为问题1,这个无论如何也没用)
所以基本上这不允许我附加最后的&秘密=通过.
我尝试的第二件事:重写 URL 中介器
我找到了这个调解员,虽然它可能不会成功,但这是一个很好的线索:我可以打电话给秘密=foo,并让中介者将其替换为秘密=通行证.
我把它放在配置文件中:
<rewrite>
<rewriterule>
<action type="replace" value="pass" fragment="query" regex="foo"/>
</rewriterule>
</rewrite>
这是行不通的。起初我以为我的动作参数不正确。但错误信息是:
Malformed URL when processing /someservlet/1.0/toti?blab=blib&secret=foo
畸形?异常堆栈跟踪中有更多详细信息:
java.net.MalformedURLException: no protocol: /someservlet/1.0/toti?blab=blib&secret=foo
所以发生的事情是调解器(记录或重写)收到一条消息,其"To:"字段指向一个没有协议的 URL!
当然,我一直在谷歌上搜索,在某些情况下我发现其他人也有logMediator:发送至:/blabla,以及其他(大多数)情况,他们有logMediator:至:http://blabla。我真的不明白是什么造成了这种差异。 :-(
所以这就是我被困住的地方! :-(
要尝试的选项
我知道可能有一个应该有效的大锤解决方案:
- use property存储完整路径和所有参数
- 实现我自己的中介器(例如在Java中)来修改这些参数
- use 属性 REST_URL_POSTFIX将修改后的后缀放入呼叫中
不过我觉得这个问题应该有一个更简单的解决方案。
我有一种希望有人能给我指出一个我没有找到的简单资源(中介、示例、语法错误等),而这正是我想要的。乐观...:-)
谢谢阅读。有任何想法吗?