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

时间:2014-02-18 16:24:19

标签: java mongodb authentication mongovue

是否有可能做出类似的事情:

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

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

在连接数据库实例期间进行身份验证。

我在MongoClient java doc

中没有看到合适的实例方法

Authentication (Optional) Official docs

中的方式

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

Authenticate to MongoDB with the Java Driver中的方式看起来正是我所需要的,但mongo 2.10.1发行版中没有com.mongodb.MongoCredential类。

3 个答案:

答案 0 :(得分:25)

您不需要更改所有现有查询,您只需要更改建立MongoClient的逻辑。大多数应用程序将此作为某种Singleton执行此操作,因此添加身份验证只需修改Singleton。这是一个痛苦的事实,没有签名只需要String,字符串作为用户名密码,但它的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 );

答案 1 :(得分:2)

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

String s = "String";
char c = 'c';

答案 2 :(得分:0)

我需要连接到多个主机,还需要连接handle authentication

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