Spring Boot连接Mongo DB权限认证失败及解决方案

33 篇文章 1 订阅
7 篇文章 0 订阅


异常详情:

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='admin', source='admin', password=<hidden>, mechanismProperties={}}
	at com.mongodb.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:162) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:39) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:68) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:46) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:168) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:46) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:122) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:52) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongodb-driver-core-3.6.4.jar:na]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172]
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server 192.9.104.125:29017. The full response is { "ok" : 0.0, "code" : 18, "errmsg" : "Authentication failed." }
	at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:164) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:295) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.CommandHelper.sendAndReceive(CommandHelper.java:84) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:34) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:119) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator.access$000(SaslAuthenticator.java:39) ~[mongodb-driver-core-3.6.4.jar:na]
	at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:52) ~[mongodb-driver-core-3.6.4.jar:na]
	... 9 common frames omitted

解决方案:

  • 报错解决之前,MongoDB 数据库连接配置
     spring: 
    	 data:
    	    mongodb:
    	      username: admin
    	      password: admin
    	      host: localhost
    	      port: 27017
    	      database: admin
    
  • 报错解决之后,MongoDB 数据库连接配置
    spring: 
       data:
    	  mongodb:
    	     uri: mongodb://admin:admin@localhost:27017/admin
    	     # 需要用户名和密码认证
    	     #uri:  mongodb://username:password@ip:port/admin
    	
    	     #不需要用户名和密码认证
    	     #uri:  mongodb://ip:port/admin	  	 
    

MongoDB远程连接身份认证:

  1. 切换到 MongoDB的bin目录下
  2. 执行连接命令,若端口是默认端口,则端口不需要另外指定
    ./mongo --port 27017
    
  3. 切换数据库
    use admin
    
  4. 使用用户名和密码进行认证
    db.auth('username','password')
    
Spring Boot中使用MongoDB切换数据库,可以通过配置多个MongoDB连接信息和使用`MongoTemplate`的构造函数来实现。下面是具体的步骤: 1. 配置多个MongoDB连接信息 在`application.properties`文件中,配置多个MongoDB连接信息,例如: ``` # MongoDB1 spring.data.mongodb.uri=mongodb://localhost:27017/db1 spring.data.mongodb.database=db1 spring.data.mongodb.authentication-database=admin spring.data.mongodb.username=user1 spring.data.mongodb.password=password1 # MongoDB2 spring.data.mongodb2.uri=mongodb://localhost:27017/db2 spring.data.mongodb2.database=db2 spring.data.mongodb2.authentication-database=admin spring.data.mongodb2.username=user2 spring.data.mongodb2.password=password2 ``` 2. 创建多个MongoTemplate 创建多个MongoTemplate,并在构造函数中指定要使用的数据库,例如: ``` @Configuration public class MongoDbConfig { @Autowired private MongoProperties mongoProperties; @Bean(name = "mongoDb1Template") public MongoTemplate mongoDb1Template() { MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(new MongoClientURI(mongoProperties.getUri() + "/db1")); return new MongoTemplate(mongoDbFactory); } @Bean(name = "mongoDb2Template") public MongoTemplate mongoDb2Template() { MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(new MongoClientURI(mongoProperties.getUri() + "/db2")); return new MongoTemplate(mongoDbFactory); } } ``` 3. 在DAO层使用不同的MongoTemplate 在DAO层使用不同的MongoTemplate来操作不同的数据库,例如: ``` @Repository public class UserRepository { @Autowired @Qualifier("mongoDb1Template") private MongoTemplate mongoDb1Template; @Autowired @Qualifier("mongoDb2Template") private MongoTemplate mongoDb2Template; public void saveUser1(User user) { mongoDb1Template.save(user); } public void saveUser2(User user) { mongoDb2Template.save(user); } } ``` 这样就可以在DAO层使用不同的MongoTemplate来操作不同的数据库了。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superbeyone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值