java连接mongodb3.2验证失败
发布日期:2021-09-18 10:05:45 浏览次数:10 分类:技术文章

本文共 4962 字,大约阅读时间需要 16 分钟。

     

    一、错误描述

                   在项目中使用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
seeds = new ArrayList
(); seeds.add(serverAddress); //设置验证信息 MongoCredential credentials = MongoCredential.createMongoCRCredential(user, dbname, password.toCharArray()); List
credentialsList = new ArrayList
(); 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
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(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

    二、解决办法

                官网查了一下官网,找到了问题的所在,文档如下

 

         到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
seeds = new ArrayList
(); seeds.add(serverAddress); //设置验证信息 MongoCredential credentials = MongoCredential.createScramSha1Credential(user, dbname, password.toCharArray()); List
credentialsList = new ArrayList
(); 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
documents = db.getCollection("mydb"); Document document=documents.find().first(); System.out.println(document.toJson()); } client.close(); }

转载地址:https://blog.csdn.net/z694644032/article/details/53844566 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux命令
下一篇:eclipse下,maven Build项目出错

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 01时58分41秒