首先,我想检查一下我的理解是否应该如何实施。
在阅读Solr 6.6.0 Kerberos Documentation之后(我已经在下面添加了一些代码片段)我相信我需要创建一个初始的CloudSolrClient来从Solr中检索令牌,方法是将cloudSolrClient传递给{{1} } 方法。
getDelegationToken(...)
然后看起来我需要创建另一个CloudSolrClient对象,该对象使用上面检索到的令牌private String getDelegationToken(final String renewer, final String user, HttpSolrClient solrClient) throws Exception {
DelegationTokenRequest.Get get = new DelegationTokenRequest.Get(renewer) {
@Override
public SolrParams getParams() {
ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
params.set("user", user);
return params;
}
};
DelegationTokenResponse.Get getResponse = get.process(solrClient);
return getResponse.getDelegationToken();
}
:
HttpSolrClient
我对上述代码的第一个问题是CloudSolrClient client = new CloudSolrClient.Builder()
.withZkHost("http://localhost:2181")
.withLBHttpSolrClientBuilder(new LBHttpSolrClient.Builder()
.withResponseParser(client.getParser())
.withHttpSolrClientBuilder(
new HttpSolrClient.Builder()
.withKerberosDelegationToken(token)
))
.build();
- 客户端尚未初始化,如何在此处使用它?
另外我有多个用户,根据上面的代码,我必须为每个用户创建两个client.getParser()
对象?第一个检索令牌CloudSolrClient
,第二个对象使用提供的令牌getDelegationToken
查询Solr。 更新:我可以重复使用用于检索令牌的SolrClient。
最后,我不明白更新程序是如何工作的 - 我理解令牌可能会过期并且必须续订但是如何将字符串作为续订者来帮助更新令牌以及该字符串应该是什么?如果有人能够指出我一些有用的文档或者提供一个如何工作的明确解释,我将不胜感激。 更新:我可能错了,但对于续订者,价值应该是" zookeeper"我从文档here中发现,使用zookeeper来存储和管理令牌信息。