我正在使用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