在Elasticsearch插件中读取文件

我正在编写一个Elasticsearch插件,该插件依赖于从磁盘上的文件读取数据。当我尝试在代码中访问此文件时,出现以下异常。

Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "patient_similarity/codes.txt" "read")

at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)

at java.security.AccessController.checkPermission(AccessController.java:884)

at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)

at java.lang.SecurityManager.checkRead(SecurityManager.java:888)

at java.io.FileInputStream.<init>(FileInputStream.java:127)

at org.gatech.lucene.search.store.DotProductStore.<init>(DotProductStore.java:22)

at org.gatech.lucene.search.store.DotProductStore.newInstance(DotProductStore.java:71)

at org.gatech.elasticsearch.CommonsPlugin.onModule(CommonsPlugin.java:39)

有什么推荐的方法来访问Elasticsearch插件中的文件吗?有什么快速的解决方法可以访问插件中的文件?

回答:

一种方法是通过禁用安全管理器来启动Elasticsearch流程,如下所示:

 bin/elasticsearch -Dsecurity.manager.enabled=false

从ES

2.x开始,默认情况下启用Java安全管理器,因此之前已将其禁用。但是请注意,此选项将在2.3中删除,因为它会使您的ES进程易受攻击。

正确的方法是自定义安全策略,并使用策略文件指定要访问的文件:

grant { 

permission java.io.FilePermission "/tmp/patient_similarity/codes.txt", "read,write";

};

您可以在四个不同的位置添加此策略:

  1. 整个系统 $JAVA_HOME/lib/security/java.policy
  2. 或仅适用于 /home/elasticsearch/.java.policy
  3. 或从命令行上指定的文件中: -Djava.security.policy=someURL
  4. 或插件中包含的plugin-security.policy文件中。

由于您正在开发插件,因此您当然应该使用选项4。

以上是 在Elasticsearch插件中读取文件 的全部内容, 来源链接: utcz.com/qa/424728.html

回到顶部