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); Listseeds = 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); Listseeds = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 01时58分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
自学编程,我该如何寻找自学资源?(含视频)
2021-06-29
android su程序分析
2021-06-29
android Superuser.apk源码分析
2021-06-29
Android从触碰屏幕开始的事件采集,解析及分发(1)
2021-06-29
福利来袭,免费获取 Android 开发资料以及直播课程
2021-06-29
优势丧失
2021-06-29
歪门邪道
2021-06-29
理解String.intern()和String类常量池疑难解析例子
2021-06-29
LeetCode题解(1175):质数排列(Python)
2021-06-29
【Android平台】 Alljoyn学习笔记二 编译自带的demo的步骤
2021-06-29
【Android平台】 Alljoyn学习笔记四 Android Core API参考
2021-06-29
【Alljoyn】Alljoyn学习笔记五 AllJoyn开源技术基础概念解析
2021-06-29
【Alljoyn】 Alljoyn学习笔记六 Alljoyn基本概念
2021-06-29
【Alljoyn】 Alljoyn学习笔记七 Alljoyn瘦客户端库介绍
2021-06-29
【Android】Activity生命周期
2019-04-26
【Android】Activity的四种launchMode
2019-04-26
【Android】Activity的task相关
2019-04-26
【Android】 Intent应用详解
2019-04-26
【Android】 Intent详解
2019-04-26