我目前正在尝试使用(相对)新的3.0
Java驱动程序连接到MongoDB副本集。但是,我似乎无法捕捉到用户提供错误凭据时发生的MongoSecurityExceptions。这是我当前的代码。
try {
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://<user>:<password>@member1.com:27017/?authSource=db"
this.mongoClient = new MongoClient(mongoClientURI);
}
catch(Exception e) {
// TODO: some proper exception handling
System.err.println(e.toLocalizedMessage());
}
当使用正确的凭据运行时,此代码可以正常工作,但是如果提供了错误的凭据,则会在try-catch之外引发异常。
com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='<user>', source='<source>', password=<hidden>, mechanismProperties={}}
at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:61)
at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32)
at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:99)
at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:44)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
at java.lang.Thread.run(Thread.java:745)
任何想法在哪里处理身份验证异常?
MongoClient构造函数不会引发任何与连接相关的异常。相反,它们在启动一个或多个尝试建立连接并基于提供的凭据进行身份验证的后台线程后立即返回。
仅当应用程序使用MongoClient在MongoDB服务器上执行某些操作时,才会引发异常。但是,该异常是通用超时异常,指示驱动程序在服务器选择超时到期之前未能找到适合该操作的服务器。例如:
MongoClient client = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27018")),
singletonList(MongoCredential.createCredential("username",
"admin",
"bad".toCharArray())),
MongoClientOptions.builder().serverSelectionTimeout(1000).build());
try {
client.getDB("admin").command("ping");
} catch (MongoTimeoutException e) {
// do something
}
1秒后将引发MongoTimeoutException。虽然未引发MongoSecurityException,但MongoTimeoutException的消息将包含相关详细信息。例如,当其中一台服务器关闭时连接到三个成员的副本集时,其余两个服务器均未通过身份验证,则MongoTimeoutException的消息字段将类似于:
等待与ReadPreferenceServerSelector {readPreference =
primary}匹配的服务器时,在1000毫秒后超时。群集状态的客户端视图是{java.net。} {type = UNKNOWN,服务器=
[{address = localhost:27017,type = UNKNOWN,state = CONNECTING,exception =
{com.mongodb.MongoSocketOpenException:异常打开套接字}}。
ConnectException:连接被拒绝}},{地址=本地主机:27018,类型=未知,状态=连接,异常=
{com.mongodb.MongoSecurityException:认证MongoCredential {mechanism =
null,userName =’username’,source
=’admin’的异常,由{com.mongodb.MongoCommandException引起的,密码=,机制属性=
{}}}:命令失败,错误18:“身份验证失败”。在服务器localhost:27018上。完整的响应为{“ ok”:0.0,“ code”:18,“
使用新的mongoDB驱动程序:https://github.com/mongodb/mongo-php-driver和新的php库:https://github.com/mongodb/mongo-php-library我得到了“授权失败”,试图执行一个简单的查找()查询。 在下面的代码中,连接字符串遵循模式mongoDB://user:password@mongoinstance: port/
通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96
我无法连接到mongo v2。6使用x509证书从Java/Groovy进行身份验证。我已经用ssl构建了mongo,感觉它配置正确。 我们的项目有两个连接Mongo的应用程序——一个是用NodeJS编写的,另一个是用Java/Groovy编写的。NodeJS项目能够使用X509证书和查询成功地进行身份验证。此外,我还可以通过指定ssl并在命令行上提供PEM文件来支持mongo。但是,我无法使用J
问题内容: 我看到了很多教程,展示了如何使用Java在mongodb中进行身份验证 我将mongodb配置为启用身份验证。在控制台中,我使用 使用管理员 db.auth(“ myUser”,“ newPassword”)并运行良好。 在Java中,在每个访问过的网站中,代码都是 大问题是代码对我不起作用,我也不知道为什么。我测试了显式更改为管理数据库。 这对我来说有效,但这不是解决方案,因为我试图
我试图在MongoDB\驱动程序\查询中使用选项: 如果$选项似乎可以: --------$options: 数组([排序]= $query没有给我好的选项: 限制和批量大小不等于20,为什么?请问怎么办? 提前感谢
我正在尝试使用mongo java驱动程序3.4从java访问mongodb。我写了下面的代码来访问mongodb,即使我在连接时输入了错误的凭据,我仍然能够访问我的数据库。 当我试图从ubuntu的终端访问mongo数据库时。它要求认证。