java连接mongodb3.2验证失败
2016-12-23 22:36
417 查看
一、错误描述
在项目中使用java连接mongodb数据库,使用的是mongoclient连接,代码如下:public void mongodbTest (String ip,int port,String user,String password,String dbname){
MongoDatabase db=null;
MongoClient client=null;
try{
MongoClientOptions.Builder build = new MongoClientOptions.Builder();
//与数据最大连接数50
build.connectionsPerHost(50);
//如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
build.threadsAllowedToBlockForConnectionMultiplier(50);
build.connectTimeout(1*60*1000);
build.maxWaitTime(2*60*1000);
MongoClientOptions options = build.build();
//设置服务器信息
ServerAddress serverAddress = new ServerAddress(ip, port);
List<ServerAddress> seeds = new ArrayList<ServerAddress>();
seeds.add(serverAddress);
//设置验证信息
MongoCredential credentials = MongoCredential.createMongoCRCredential(user, dbname,
password.toCharArray());
List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
credentialsList.add(credential);
client =new MongoClient(seeds, credentialsList,options);
//获取数据库mydb,不存在的话,会自动建立该数据库
db = client.getDatabase("mydb");
}catch (Exception e) {
return e.getClass().getName() + ": " + e.getMessage();
}
if(db!=null&&client!=null){
//获取集合
MongoCollection<Document> documents = db.getCollection("mydb");
Document document=documents.find().first();
System.out.println(document.toJson());
}
client.close();
}
运行后,报如下错误
com.mongodb.MongoSecurityException: Exception authenticating
at com.mongodb.connection.NativeAuthenticator.authenticate(NativeAuthenticator.java:48)
at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll
4000
(InternalStreamConnectionInitializer.java:109)
at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:46)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:116)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113)
at java.lang.Thread.run(Unknown Source)
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'auth failed' on server xxx.xxx.xxx.xxx:27017. The full response is { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }
at com.mongodb.connection.CommandHelper.createCommandFailureException(CommandHelper.java:170)
at com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:123)
at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)
at com.mongodb.connection.NativeAuthenticator.authenticate(NativeAuthenticator.java:46)
... 5 more
二、解决办法
官网查了一下官网API,找到了问题的所在,文档如下到mongodb数据库的admin数据库中一查,发现验证机制为SCRAM-SHA-1,于是在java代码中将createMongoCRCredential()方法换成createScramShalCredential()方法,验证通过,成功解决问题
public void mongodbTest (String ip,int port,String user,String password,String dbname){ MongoDatabase db=null; MongoClient client=null; try{ MongoClientOptions.Builder build = new MongoClientOptions.Builder(); //与数据最大连接数50 build.connectionsPerHost(50); //如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待 build.threadsAllowedToBlockForConnectionMultiplier(50); build.connectTimeout(1*60*1000); build.maxWaitTime(2*60*1000); MongoClientOptions options = build.build(); //设置服务器信息 ServerAddress serverAddress = new ServerAddress(ip, port); List<ServerAddress> seeds = new ArrayList<ServerAddress>(); seeds.add(serverAddress); //设置验证信息 MongoCredential credentials = MongoCredential.createScramSha1Credential(user, dbname, password.toCharArray());
List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
credentialsList.add(credential);
client =new MongoClient(seeds, credentialsList,options);
//获取数据库mydb,不存在的话,会自动建立该数据库
db = client.getDatabase("mydb");
}catch (Exception e) {
return e.getClass().getName() + ": " + e.getMessage();
}
if(db!=null&&client!=null){
//获取集合
MongoCollection<Document> documents = db.getCollection("mydb");
Document document=documents.find().first();
System.out.println(document.toJson());
}
client.close();
}
相关文章推荐
- mongodb3.0分片及java代码连接操作测试(开启用户验证)
- java使用“用户名+密码”连接mongodb,认证失败的问题解决
- MongoDB3.2 Java连接方式
- mongodb由于目标计算机积极拒绝无法连接失败
- kafka java中发送数据、连接失败问题解决
- MongoDB_Java连接mongo 检索文档中指定字段的不同值
- (sql2005)com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: con
- 用java连接mongodb并执行$sum和$avg结合的聚合函数的实例。
- Java连接SQL Server和MongoDb
- com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Conn
- Java连接MySQL数据库失败的一种可能原因
- java连接百度云BAE的mysql拓展服务失败原因
- java 连接mongodb
- mongodb3.2.6远程连接认证失败
- com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection timed out: connect数据库
- 编写简单的连接MongoDB数据库C++程序 && 解决编译C++程序时链接MongoDB动态库失败的问题
- Mongodb 3.2 Java 显示指定字段 条件查询 官方
- mongodb的安装(window)及java连接测试
- 【MongoDB】MongoDB 3.2 SCRAM-SHA-1验证方式
- MongoDB创建用户和Java连接MongoDB