1

我正在尝试使用来自 Java 客户端的身份验证连接到 DSE 5.1 集群。我使用的 Cassandra 驱动程序是

<dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.1.4</version>
    </dependency>

添加了一个尝试连接到特定 KeySpace 的简单测试:

@Test
public void testConnection() {
    String user = "****";
    String pswd = "*******";
    String host = "********"
    Cluster cluster = Cluster.builder().addContactPoints(host)
            .withPort(9042)
            .withCredentials(user.trim(), pswd.trim())
            .build();
    Session session = cluster.connect(QueryBuilder.quote("TestKS"));
    Assert.assertNotNull(session);
}

我最终得到com.datastax.driver.core.exceptions.AuthenticationException

从终端,我可以使用相同的凭据连接到此节点,但从我的 Java 代码中,我无法通过此异常。

堆栈跟踪

com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host /<host>:9042: Failed to login. Please re-try.
    at com.datastax.driver.core.Connection$8.apply(Connection.java:390)
    at com.datastax.driver.core.Connection$8.apply(Connection.java:359)
    at com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:211)

请告知我所缺少的。

4

1 回答 1

2

您没有提供完整的堆栈跟踪,因此很难确切知道您的代码失败的原因。

无论如何,Java 驱动程序 3.1.4 已经 4 年了,如果您刚开始使用新应用程序,我们建议您使用与 DSE 5.1 兼容的最新 Java 驱动程序 4(顺便说一下,没有 Cassandra 5.1)。

您可以通过编程方式在驱动程序中配置身份验证,但推荐的方法是在配置文件中指定凭据。例如:

datastax-java-driver {
  advanced.auth-provider {
    class = PlainTextAuthProvider
    username = user
    password = pass
  }
}

有关详细信息,请参阅驱动程序文档中的身份验证页面。

如果您不熟悉为 Cassandra 开发应用程序,我们在Astra上提供了示例应用程序,您可以在其中查看完整的源代码,这样您就可以快速开始。干杯!

于 2020-12-16T04:53:39.497 回答