8

是否可以制作类似的东西:

MongoClient mongo = new MongoClient(ip, port, usrName, password)

在 JAVA 中类似于MongoVUE或其他基于 SQL 的数据库的身份验证方法。

在连接到数据库实例期间完成身份验证。

我在MongoClient java doc中没有看到合适的实例方法

以及认证方式(可选)官方文档

不符合我的目标,因为它需要更改我的应用程序中现在不使用身份验证的所有现有查询方法。

使用 Java 驱动程序对 MongoDB 进行身份验证的方式看起来正是我所需要的,但在 mongo 2.10.1 发行版中没有 com.mongodb.MongoCredential 类。

4

3 回答 3

28

您不需要更改所有现有查询,只需要更改建立 MongoClient 的逻辑。大多数应用程序将其作为某种单例进行,因此添加身份验证只是修改单例的问题。没有一个只需要字符串的签名,用户名密码的字符串,但它的 Mongo Java API,已经习惯了失望,这是一个痛苦的过程。

您可以选择获得最短签名的 MongoURI 路径...

MongoClient mongo = new MongoClient(
  new MongoClientURI( "mongodb://app_user:bestPo55word3v3r@localhost/data" )
);

或者使用更详细的 List<MongoCredential> 路径

List<ServerAddress> seeds = new ArrayList<ServerAddress>();
seeds.add( new ServerAddress( "localhost" );
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(
    MongoCredential.createMongoCRCredential(
        "app_user",
        "data",
        "bestPo55word3v3r".toCharArray()
    )
);
MongoClient mongo = new MongoClient( seeds, credentials );
于 2014-02-18T17:05:30.143 回答
2

继 Bob Kuhar 接受的答案之后,在 Mongo3 中,机制已从质询响应更改为 SHA1,如代码片段所示。我需要更新代码片段如下:

...
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
...

// Manage the mongo db connection...
List<ServerAddress> seeds = new ArrayList<ServerAddress>();
seeds.add( new ServerAddress(configuration.getMongoHost(), configuration.getMongoPort() ));
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(
    MongoCredential.createScramSha1Credential(
        configuration.getMongoUser(),
        configuration.getMongoDb(),
        configuration.getMongoPassword().toCharArray()
    )
);
MongoClient mongo = new MongoClient( seeds, credentials );
于 2016-03-29T16:42:43.370 回答
0

我需要连接到多个主机,还需要处理身份验证

使用3.12 版

List<ServerAddress> seeds = new ArrayList<>();
seeds.add(new ServerAddress("localhost"))

credential = MongoCredential.createScramSha1Credential(
      user,
      db,
      pass.toCharArray()
);

mongoClient = MongoClients.create(
      MongoClientSettings.builder()
           .applyToClusterSettings(builder -> 
                 builder.hosts(seeds))
           .credential(credential)
           .build());
于 2020-02-14T21:29:36.493 回答