MongoDB原始java连接

MongoDB原始java连接,java,mongodb,mongodb-authentication,Java,Mongodb,Mongodb Authentication,我正在尝试创建一个通用的mongo连接组件,该组件将用于不同的mongo DB实例。我设法用一些代码使它工作: 我不明白为什么它需要在两个位置指定数据库:“myDb”,一次在凭证中,一次在它执行getDatabase时。除此之外,在我的设置中,我需要在createCredential:“admin”上指定一个不同的DB才能工作。为什么凭证数据库与我将运行查询的数据库不同?深入检查代码时,您会发现以下令人信服的原因 这是所有验证者都失败的地方 private void authenticateAl

我正在尝试创建一个通用的mongo连接组件,该组件将用于不同的mongo DB实例。我设法用一些代码使它工作:


我不明白为什么它需要在两个位置指定数据库:
“myDb”
,一次在凭证中,一次在它执行
getDatabase
时。除此之外,在我的设置中,我需要在
createCredential
:“admin”上指定一个不同的DB才能工作。为什么凭证数据库与我将运行查询的数据库不同?

深入检查代码时,您会发现以下令人信服的原因

这是所有验证者都失败的地方

private void authenticateAll(final InternalConnection internalConnection, final ConnectionDescription connectionDescription) {
        if (connectionDescription.getServerType() != ServerType.REPLICA_SET_ARBITER) {
            for (final Authenticator cur : authenticators) {
                cur.authenticate(internalConnection, connectionDescription);
            }
        }
    }
身份验证程序
包含凭据列表。有四种实现

  • 违约
  • 土生土长的
  • x509
  • 萨斯勒
  • “myDb”,一旦进入凭证-为什么

    这里指定的主要原因是,必须在哪个数据库上执行authenticate命令,因为每个数据库可以有不同的用户名

    executeCommand(getCredential().getSource(), authCommand, connection);
    
    一次,当它执行getDatabase时-为什么


    这完全不同。它返回
    MongoDatabase
    对象,该对象包含
    读取、写入关注点、集合列表、创建视图、创建集合的选项

    在MongoDB身份验证上查看这些:和。
    executeCommand(getCredential().getSource(), authCommand, connection);