如何使用来自 Java 的身份验证连接到 Cassandra 5.1

How to connect to Cassandra 5.1 with Authentication from Java

我正在尝试通过 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.apply(Connection.java:390)
    at com.datastax.driver.core.Connection.apply(Connection.java:359)
    at com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:211)

请告知我遗漏了什么。

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

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

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

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

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

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