我正在使用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插件來擴展/ _search端點?
我找到了搜索防護https://github.com/floragunncom/search-guard和源代碼,感覺就像我可以創建自己的插件extends Plugin implements ActionPlugin
,但後來我卡住了,不知道該去哪裏。
從源代碼中,我知道我可以添加自己的ActionFilter
並將其加入到行動鏈Plugin
,使得所有要求我們將向您/_search
終端還將赴經過我的ActionFilter
。但我沒有完整的可能操作列表,可能是indices:data/read/search
(搜索)或indices:admin/delete
(刪除索引)。有太多的使用嘗試和錯誤。
另一件事是,在ActionFilter
,我如何從Request
對象獲得POST請求負載?在/_search
請求中,我得到了SearchRequest
,但它沒有來自瀏覽器的http請求頭。
== ==更新
發現我可以使用使用堆棧跟蹤來獲取調用歷史,所以對於ActionFilter
調用堆棧是像
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)
在
RestSearchAction#prepareRequest
,ES使用parseSearchRequest
和轉換RestRequest
數據到SearchRequest
,這意味着我無法在ActionFitler
中獲得RestRequest
。應該有另一種方式來傳遞這些數據嗎?因爲我想擴展一個已經存在的/_search
不添加另一個端點,所以我覺得我不應該創建更多RestHandler