编写elasticsearch插件时,很容易出现权限问题。java.lang.RuntimePermission "getClassLoader"。
解决方案: https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html
具体来说:
1,在插件根目录下 新建 plugin-security.policy 文件,其中加上必须的权限。
elasticsearch会在启动时读取该文件,将文件中的权限加到该plugin目录下的所有的 *.jar 上。
2,在使用权限的地方使用赋权代码:
// 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 // 你要的额外权限的地方的代码 );
这样doPrivileged 里面的代码就会获取plugin-security.policy中的权限,不会报错了。除非plugin-security.policy文件中权限没有配全。
以上就是elasticsearch插件的获取权限的流程。
警告:其中第二步是不可避免的,虽然很麻烦。