创建经典插件
编辑创建经典插件
编辑经典插件为 Elasticsearch 提供了自定义身份验证、授权、评分等机制。
插件发布生命周期
经典插件要求您为每个新的 Elasticsearch 版本构建一个新版本。此版本在安装插件和加载插件时进行检查。如果存在 elasticsearch.version
不正确的插件,Elasticsearch 将拒绝启动。
经典插件文件结构
编辑经典插件是 ZIP 文件,由 JAR 文件和 一个名为 plugin-descriptor.properties
的元数据文件组成,这是一个描述插件的 Java 属性文件。
请注意,只有位于插件根目录的 JAR 文件才会添加到插件的类路径中。如果需要其他资源,请将它们打包到资源 JAR 中。
示例插件
编辑Elasticsearch 存储库包含插件示例。 其中一些包括:
- 具有自定义设置的插件
- 具有自定义摄取处理器的插件
- 添加自定义 rest 端点
- 添加一个自定义重评分器
- 一个用 Java 实现的脚本
这些示例提供了入门所需的基础知识。有关如何编写插件的更多信息,我们建议查看现有插件的源代码以获取灵感。
测试您的插件
编辑使用 bin/elasticsearch-plugin install file:///path/to/your/plugin
安装您的插件进行测试。只有当 Java 插件位于 plugins/
目录中时,才会自动加载。
Java 安全权限
编辑某些插件可能需要额外的安全权限。插件可以包含可选的 plugin-security.policy
文件,其中包含用于额外权限的 grant
语句。任何额外的权限都会以很大的警告显示给用户,并且他们必须在交互式安装插件时确认这些权限。因此,如果可能,最好避免请求任何虚假的权限!
如果您使用的是 Elasticsearch Gradle 构建系统,请将此文件放在 src/main/plugin-metadata
中,它也会在单元测试期间应用。
Java 安全模型是基于堆栈的,额外的权限会被授予插件中的 jar,因此您必须在需要提升权限的操作周围编写正确的安全代码。您可能需要添加检查以防止非特权代码(例如脚本)获得提升的权限。例如:
// ES permission you should check before doPrivileged() blocks import org.elasticsearch.SpecialPermission; SecurityManager sm = System.getSecurityManager(); if (sm != null) { // unprivileged code such as scripts do not have SpecialPermission sm.checkPermission(new SpecialPermission()); } AccessController.doPrivileged( // sensitive operation );
有关更多信息,请查看Java SE 的安全编码指南。