您的位置:首页 > 数据库 > Mongodb

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();
}




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: