问题描述
我正在尝试使用Apache Calcite连接到ElasticSearch,并且在设置用户名密码时遇到问题。
我尝试使用operand
(基于JSON),Properties(DriverManager.getConnection(String url,Properties config)
)和DriverManager.getConnection(String url,username,password)
来配置用户名/密码,但是却无法获取其中任何一个工作。
我以前已将问题发布到Apache JIRA
我的代码如下
Properties config = new Properties();
config.put("lex","JAVA");
String sql = "select * from index";
try (Connection con = DriverManager.getConnection("jdbc:calcite:model=src/main/resources/es.json",config)) {
try (Statement stmt = con.createStatement()) {
try (ResultSet rs = stmt.executeQuery(sql)) {
printRs(rs);
}
}
}
尝试使用操作数进行设置
{
"version": "1.0","defaultSchema": "elasticsearch","schemas": [
{
"type": "custom","name": "elasticsearch","factory": "org.apache.calcite.adapter.elasticsearch.ElasticsearchSchemaFactory","operand": {
"coordinates": "{'192.168.133.104': 9200}","jdbcUser": "elastic","jdbcPassword": "elastic"
}
}
]
}
并引发异常
{
"error":{
"root_cause":[
{
"type":"security_exception","reason":"missing authentication token for REST request [/_alias]","header":{
"WWW-Authenticate":"Basic realm="security" charset="UTF-8""
}
}
],"type":"security_exception","header":{
"WWW-Authenticate":"Basic realm="security" charset="UTF-8""
}
},"status":401
}
解决方法
在提出此问题时这是不可能的,但是此功能has since been added将包含在下一版本的Calcite(1.26.0)中。除了配置中的coordinates
键之外,您还可以添加username
和password
以指定身份验证参数。