首先,我想检查一下我对如何实施的理解是否正确。
在阅读了Solr 6.6.0 Kerberos 文档(我在下面包含了一些代码片段)之后,我相信我需要创建一个初始 CloudSolrClient 来从 Solr 检索令牌,方法是将 cloudSolrClient 传递给该getDelegationToken(...)
方法。
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();
}
然后看起来我需要创建另一个 CloudSolrClient 对象,该对象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 new CloudSolrClient.Builder() .... .withKerberosDelegationToken(token)
。更新:我也许可以重用用于检索令牌的 SolrClient。
最后,我不明白更新器是如何工作的 - 我知道令牌可能会过期并且必须更新,但是将字符串作为更新器传递如何帮助更新令牌以及这个字符串应该是什么?如果有人可以向我指出一些有用的文档或提供清晰的解释,我将不胜感激。 更新:我可能错了,但是对于更新者来说,值应该是“zookeeper”我从这里的文档中发现,zookeeper 用于存储和管理令牌信息。