繁体   English   中英

使用 Java 连接到 MongoDB 服务器实例期间的身份验证

[英]Authentication during connection to MongoDB server instance using Java

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

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

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

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

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

以及身份验证的方式(可选)官方文档

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

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

您不需要更改所有现有查询,您只需要更改建立 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 );

继 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 );

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

使用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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM