当前位置: 首页 > 知识库问答 >
问题:

无法在启用密码认证的情况下将 Java 客户机连接到 cassandra

江志业
2023-03-14

我的macbook上默认安装了Datastax enterprise。我能够创建我的keyspace并设置我所有的应用程序,包括使用solr。

我正在尝试为我们的开发集群开发一组打开密码身份验证的步骤。

到目前为止,我已经更新了/usr/本地/dse/资源/卡桑德拉/conf/cassandra.yaml并更改了以下属性:

authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer

我重新启动了节点,可以使用cqlsh登录并查询我的密钥空间:

cqlsh -u cassandra -p cassandra

此时,我尝试在会话生成器上设置凭据:主机是:cassandra.host=localhost

Session session = keyspaceToSessionMap.get(keyspace);
    if( session == null){
        Cluster cluster = Cluster.builder().addContactPoints(hosts)
                .withCredentials(username, password)
                //.withSSL()
                .build();
        session = cluster.connect(keyspace);
        keyspaceToSessionMap.put(keyspace,session);
    }

但是,我无法成功连接。所以我添加了一个新用户,并能够通过cqlsh再次登录,但仍然无法获得Java驱动程序来连接。

cqlsh -u username -p password
Connected to LocalCluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.8.689 | DSE 4.7.3 | CQL spec 3.2.0 | Native protocol v3]

我使用'com.datastax.cassandra: cassandra-driver-dse: 2.1.9'通过gradle为驱动程序。

我总是得到以下堆栈跟踪,通过调试可以看到用户名和密码设置正确:

Caused by: com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host localhost/127.0.0.1:9042: Username and/or password are incorrect
at com.datastax.driver.core.Connection$8.apply(Connection.java:376)
at com.datastax.driver.core.Connection$8.apply(Connection.java:346)

这似乎应该很简单,但我被难住了。

我与cassandra驱动程序相关的依赖关系图包含以下内容:

+--- com.datastax.cassandra:cassandra-driver-dse:2.1.9
|    \--- com.datastax.cassandra:cassandra-driver-core:2.1.9 -> 2.1.8
|         +--- io.netty:netty-handler:4.0.27.Final
|         |    +--- io.netty:netty-buffer:4.0.27.Final
|         |    |    \--- io.netty:netty-common:4.0.27.Final
|         |    +--- io.netty:netty-transport:4.0.27.Final
|         |    |    \--- io.netty:netty-buffer:4.0.27.Final (*)
|         |    \--- io.netty:netty-codec:4.0.27.Final
|         |         \--- io.netty:netty-transport:4.0.27.Final (*)
|         +--- com.google.guava:guava:14.0.1 -> 18.0
|         \--- com.codahale.metrics:metrics-core:3.0.2
|              \--- org.slf4j:slf4j-api:1.7.5 -> 1.7.12

我创建了以下通过的测试。

Cluster cluster = Cluster.builder().addContactPoints("localhost")
                    .withCredentials("username", "password")
                    //.withSSL()
                    .build();
            Session session = cluster.connect("keyspace");
            Assert.assertNotNull(session);

我能分辨出两者之间的唯一区别是“localhost”现在是一个常量,而不是大小为 1 的数组。

共有1个答案

红经亘
2023-03-14

发现我有一个尾随空格,这就是根本原因。

Cluster cluster = Cluster.builder().addContactPoints(hosts)
                .withCredentials(username.trim(), password.trim())
                //.withSSL()
                .build();
 类似资料:
  • 问题内容: 我正在创建一个应用程序,并且需要连接到数据库。数据库需要登录名/密码,因此应用程序可以执行选择和插入之类的操作。 在应用程序中,我需要使用登录名和密码连接到数据库,因此应用程序可以自由地在数据库上执行某些任务。 我的问题是:如何在不暴露密码的情况下存储和使用密码来连接数据库? 我不能简单地使用哈希或加密来存储密码,因为数据库必须能够识别密码(我认为大多数或所有数据库都必须以纯文本形式接

  • 问题内容: 我已经在带有Selenium和PhantomJS的Python中设置了一个简单的webscraping脚本。我总共要抓取大约200个URL。脚本最初运行良好,然后运行了大约20-30个URL(它可能会更多/更少,因为它失败时似乎是随机的,并且与任何特定的URL不相关),我在python中收到以下错误: 还有我的ghostdriver.log: 我进行了搜索,关于SO的大多数问题似乎都是

  • 问题内容: 我正在开发客户端/服务器身份验证程序,但是遇到了问题。客户端可以很好地与服务器建立连接,但是一旦我输入密码和用户名,它就不会返回有效的用户名/密码。如果用户使用正确的用户名/密码服务器登录,则应返回“ Welcome,username”,如果无效,则返回“登录失败”。我查看了printwriter和bufferedreader文档,以确保我使用正确的方法在服务器/客户端之间正确传递文本

  • 我现有的Datastax Cassandra设置正在运行。我们刚刚在系统中添加了身份验证,现在我们可以使用我们的AD帐户登录。这非常好,当然有效。但是应用程序需要使用硬编码的用户名/密码才能连接。 在SQL Server中,我们能够设置一个用户作为运行服务,然后它将通过AD连接和工作。然而,在卡珊德拉这是不一样的。 如果我不想在app.config文件中包含用户名,尤其是密码,我有什么选择?

  • 我正在使用http-proxy-middleware(https://www.npmjs.com/package/http-proxy-middleware)实现另一个REST API的代理,该API启用了基于客户端证书的身份验证(RequestCert:true,RejectunAuthorized:true)。 客户端调用代理API(https://localhost:3000/auth),其

  • 我正在尝试连接到一个用VB编写的应用程序,使用Jintegra从JAVA访问它。因为我不知道如何使用Eclipse中的JINTEGRA_NATIVE_模式,所以我不得不使用cmd和Javac。。。无论如何,每次我尝试运行链接时都会遇到这个恼人的错误(没有实际的代码,只有指向其他应用程序的链接。我在这里阅读了所有其他相关问题,却找不到任何可能有用的东西..我对此完全是新手..如果你能帮忙,请在这里帮