簡単に思えることをやろうとしていますが、うまくいきません。基本的には、WSO2 API マネージャーに URL パラメーターを REST 呼び出しに追加してもらいたいと考えています。
セットアップと問題
WSO2 API マネージャーがインストールされています。また、 someservletと呼ばれる偽のサーブレットで実行されている Tomcat もあります。サーブレットをマネージャーに API として追加したので、サーブレットを直接呼び出すか、WSO2 API マネージャーを介して呼び出すことができます。
走れる
curl http://localhost:8080/someservlet/servlet/toto?blob=blib&secret=pass
サーブレットは正常に動作し、パス/totoとパラメーターblobおよび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"
(シークレットパラメータを削除したことに注意してください)
...それでも同じ結果が得られます。
したがって、基本的には API マネージャーに URL パラメーターsecret=passを追加してもらいたいと考えています。
最初に試したこと:プロパティメディエーター
プロパティ 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を実行したかのようです:すべてのパスとパラメーターが消え、構成されたものに置き換えられました。ねえ、それがうまくいくはずですよね!
問題:
- これは URL に何かを追加するのではなく、URL の接尾辞を設定します。つまり、既存のパラメーターが消えます (上記の例ではblab=blib ) 。
- 有効な値になるには「/」で始まる必要があるため、 &secret=pass を追加することはできません(もちろん、問題 1 のため、これはとにかく役に立たないでしょう)。
したがって、基本的にこれでは、最後の&secret=passを追加できません。
2 番目に試したこと: URL メディエーターを書き換える
私はこのメディエーターを見つけました。おそらくうまくいかないかもしれませんが、良いリードです: secret=fooで呼び出すだけで、メディエーターにそれをsecret=passに置き換えることができます。
これを設定ファイルに入れました:
<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: To: /blabla を持っていることを発見した場合や、 logMediator: To: http ://blabla を持っている他の (ほとんどの) ケースがあります。何が違いを引き起こしているのか、私にはよくわかりません。:-(
だから、これは私が立ち往生しているところです!! :-(
試すオプション
おそらくうまくいくはずのハンマーソリューションがあることを私は知っています:
- プロパティを使用して、完全なパスとすべてのパラメーターを保存します
- これらのパラメーターを変更するために、独自のメディエーターを (Java などで) 実装します。
- プロパティ REST_URL_POSTFIXを使用して、変更された接尾辞を呼び出しに配置します
ただし、この問題にはもっと簡単な解決策が必要だと思います。
私が見つけていない単純なリソース (メディエーター、サンプル、構文エラーなど) を誰かが教えてくれることを期待しています。楽観主義... :-)
読んでくれてありがとう。何か案は?