【发布时间】:2017-03-16 21:20:58
【问题描述】:
我使用的是 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/,但它是关于创建另一个端点的。
我找到了 search-guard 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
【问题讨论】:
标签: elasticsearch elasticsearch-plugin elasticsearch-5