0

我有一個應用程序通過使用JAVA API的傳輸客戶端連接到另一臺服務器上的彈性搜索節點。該節點已啓用屏蔽安全性,所以我使用maven來獲取屏蔽瓶。我的應用運行良好。但是,現在我正在嘗試爲我的應用程序的構建過程設置集成測試。因此,我嘗試運行本地節點來運行我的測試,而不是嘗試傳輸客戶端。但是,本地節點有關下列問題的投訴。禁用集成測試的屏蔽

  1. 該許可證僅在30天內有效。該文檔很好地描述瞭如何使用各種工具來完成此操作,但它並沒有說明如何通過JAVA API更新許可證。
  2. 我得到一個org.elasticsearch.shield.authz.AuthorizationException:action [indices:data/write/index]未經授權用戶[__es_system_user]。發生這種情況是因爲我的節點沒有配置任何用戶。文檔再一次很好地描述瞭如何將用戶添加到節點,但並未解釋如何使用JAVA API完成此操作。

這我想知道是否有可能只是禁用集成測試屏蔽。我嘗試了以下,但它沒有奏效。任何幫助表示讚賞。

nodeBuilder().local(true).settings(ImmutableSettings.builder() 
    .put("shield.enabled", false)).build() 

回答

0

您使用的是什麼版本的Elasticsearch和Shield? shield.enabled適合我;這樣做時,我只是做了一個簡單的Maven項目下與ES 1.5.2和1.2.0盾

final Node node = NodeBuilder.nodeBuilder() 
      .settings(ImmutableSettings.builder().put("shield.enabled", false)) 
      .local(true).node(); 
Client client = node.client(); 
ClusterHealthResponse response = client.admin().cluster().prepareHealth().get(); 
System.out.println(response.toString()); 

沒有錯誤有關授權。如果你仍然有一些錯誤,你可以將它們添加到您的原始文章?

+0

很奇怪,現在工作。似乎我回答了我自己的問題。順便說一下,我使用上面的代碼創建了一個節點。有沒有辦法使用TransportClient從相同的jvm連接到此節點? – dingdong

+1

是的,這是可能的: 'InternalNode internalNode =(InternalNode)node; TransportClient transportClient = new TransportClient(ImmutableSettings.settingsBuilder() .put(「shield.enabled」,false) .put(「node.local」,true)); TransportAddress address = internalNode.injector()。getInstance(TransportService.class).boundAddress()。publishAddress(); transportClient.addTransportAddress(address);' 基於elasticsearch的測試代碼:https://github.com/elastic/elasticsearch/blob/1.x/src/test/java/org/elasticsearch/test/InternalTestCluster.java #L854-L869 – jaymode

+0

我無法從運行TransportClient的代碼中訪問我的內部節點。是否有一些靜態函數來檢索最後創建的主動節點? – dingdong