2017-03-16 3 views
0

私はES 5.1.2を使用しています。すべての/ _searchリクエストに対して簡単な認証キーの検索を行いたいと思います。 elastic.coで非常に詳細なプラグイン開発ガイドが見つかりませんでしたが、これまで見つかった唯一のドキュメントはhttp://david.pilato.fr/blog/2016/10/19/adding-a-new-rest-endpoint-to-elasticsearch-updated-for-ga/ですが、別のエンドポイントを作成することになります。エンドポイントを拡張するためにelasticsearchプラグインを書くには?

検索ガードhttps://github.com/floragunncom/search-guardが見つかりました。ソースコードから自分のプラグインを作成することができますが、extends Plugin implements ActionPluginを作成できますが、行き詰まっていてどこに行くのかわかりません。ソースコードから

は、私は ActionFilter自分自身を追加し、すべての要求がまた私の ActionFilterスルー行こう /_searchエンドポイントスルーに行くように、 Pluginに行動チェーンにそれを追加することができます知っています。しかし、私は indices:data/read/search(検索)または indices:admin/delete(インデックスの削除)の可能性のあるアクションの完全なリストを持っていません。 tryとerrorを使うにはあまりにも多くのものがあります。

ActionFilterでは、RequestオブジェクトからPOST要求ペイロードを取得するにはどうすればよいですか。 /_searchリクエストでは、私はSearchRequestを取得しましたが、ブラウザからhttpリクエストヘッダーがありません。コールスタックは、ES parseSearchRequestを使用してRestRequestを変換し、

RestSearchAction#prepareRequest
at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:171) 
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:145) 
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:87) 
at org.elasticsearch.client.node.NodeClient.executeLocally(NodeClient.java:75) 
at org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java:64) 
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:403) 
at org.elasticsearch.client.support.AbstractClient.search(AbstractClient.java:530) 
at org.elasticsearch.rest.action.search.RestSearchAction.lambda$prepareRequest$0(RestSearchAction.java:83) 
at org.elasticsearch.rest.action.search.RestSearchAction$$Lambda$1405/1241306571.accept(Unknown Source) 
at org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:82) 

のようなものですActionFilterためので、私は、呼び出し履歴を取得するために使用するスタックトレースを使用することができますが見つかり

==更新==

データはSearchRequestになります。つまり、ActionFitlerRestRequestを取得できません。このデータを渡す別の方法があるはずですか?私は存在を拡張したいので、別のエンドポイントを追加しないようにもう一度エンドポイントを追加しないでください。RestHandler

答えて

0

一時的な解決策が見つかりました。ソースコードはhereです。

ロング事短い、(通常は新しいエンドポイントとの)RestHandlerとしてあなたのプラグインを実装するとき、あなたはregisterHandlerをスキップしてのみregisterFilterを行うことができます。論理をRestFilterに実装します。これは、ElasticSearch source codeで、RestControllerが新しいリクエストを取得したときに、RestFilterがあるかどうかをチェックします。そうすれば、フィルタのチェーン全体を通過し、リクエストURIに基づいて特定のハンドラにディスパッチされます。 search guard 5

は直接RestHandlerを作成せずにRestControllerRestFilterを登録する方法があるようですが、私はそれを使用していなかったので、私は、全体の流れを理解していません。

私の主な参考文献:

関連する問題