当前位置: 首页 > 面试题库 >

在Elasticsearch插件中读取文件

金旺
2023-03-14
问题内容

我正在编写一个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。



 类似资料:
  • 我需要从eclipse中的属性文件中读取配置详细信息。我已经将放在与相同的级别,并在我调用的类文件中: 我得到一个。有更好的方法吗?

  • 问题内容: 我正在尝试读取资源(asdf.txt),但是如果文件大于5000字节,例如,在content变量的末尾插入了4700个空字符。有什么办法可以删除它们?(或设置缓冲区的正确大小?) 这是代码: 问题答案: 最简单的方法是做正确的事情:使用阅读器读取文本数据: 并非 一定 要定义要读取的文本文件的编码。在上面的示例中,它将是THE_ENCODING。 请注意,您的代码和本示例代码在Java

  • 问题内容: 是否可以用Python读取二进制MATLAB .mat文件? 我已经看到SciPy声称支持读取.mat文件,但是我没有成功。我安装了SciPy 0.7.0版,但找不到该方法。 问题答案: 需要导入,…

  • 问题内容: 如何在go程序中读取xz文件?当我尝试使用阅读它们时,出现错误。 问题答案: 您有3个选择。 尝试另一个库,也许是使用cgo的库。我在这里看到两个。 直接使用cgo /创建自己的lib。 使用xz可执行文件。 选项三比听起来容易。这是我会用的: 此处可运行的代码:http : //play.golang.org/p/SrgZiKdv9a

  • 问题内容: 我有以下json文件。我想知道我应该将json文件放在我的项目中的位置以及如何读取和存储它。 问题答案: 将该文件放入资产中 。 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹。 将该文件读取为: 然后您可以简单地通过此函数读取此返回 有关JSON的更多详细信息,请参见 http://www.vogella.com/articles/Android

  • 我正试图编写一个程序,读取网络中相互交互的节点列表。它以以下格式写入文本文件: 这表示节点1与节点2和节点3交互,节点2仅与节点3交互,等等。 该程序将能够读取该文件,并将删除任何重复的交互,并且如果我输入节点的名称,将能够向我返回节点与其他节点的交互次数。然而,我对Java非常陌生,我首先尝试让它读入文件,尽管我的代码目前没有读入文件。以下是我迄今为止的代码: 任何关于如何解决此问题的帮助都将不