具体问题

springboot 项目,在 properties 中配置 spring.data.mongodb.uri=mongodb://username:pwd@ip:27017/database

注意:如果 username 或者 pwd 中有特殊字符,需要 对 内容进行urlEncode

  • 访问时报错啊如下:
org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='xxx', source='xxxx', password=<hidden>, mechanismProperties=<hidden>}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='xxxx', source='xxxx', password=<hidden>, mechanismProperties=<hidden>}
	at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:140)
	at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2874)
	at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:568)
	at org.springframework.data.mongodb.core.MongoTemplate.insertDocument(MongoTemplate.java:1436)
	at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:1236)
	at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1168)
	at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:1153)
	at com.enn.core.service.mongodb.MdbOptService.writeData(MdbOptService.java:26)
xxxxxxxx.......

Caused by: com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='xxx', source='xxxx', password=<hidden>, mechanismProperties=<hidden>}
	at com.mongodb.internal.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:201)
	at com.mongodb.internal.connection.SaslAuthenticator.access$300(SaslAuthenticator.java:40)
	at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:78)
	at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:47)
	at com.mongodb.internal.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:207)
	at com.mongodb.internal.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:47)
xxxx...
Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server 10.39.89.212:27017. The full response is {"operationTime": {"$timestamp": {"t": 1653382464, "i": 1}}, "ok": 0.0, "errmsg": "Authentication failed.", "code": 18, "codeName": "AuthenticationFailed", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1653382464, "i": 1}}, "signature": {"hash": {"$binary": {"base64": "ZeaQE4JPVmTutGbbVklUJqjrxhg=", "subType": "00"}}, "keyId": 7087834853273501697}}}
	at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175)
	at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:302)
	at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:258)
	at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83)
	at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33)
	at com.mongodb.internal.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:158)
	at com.mongodb.internal.connection.SaslAuthenticator.access$100(SaslAuthenticator.java:40)
	at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:54)
	... 60 more

问题原因 是授权失败

  1. 在资源路经中添加授权库名:authSource=admin
  2. 加密方式:authMechanism=SCRAM-SHA-1

注意: url 的后边可以添加问号,后边可以添加很多拓展信息的。。。。

即: spring.data.mongodb.uri=mongodb://username:pwd@ip:27017/database?authSource=admin&authMechanism=SCRAM-SHA-1

如果是host,port 的方式:

spring.data.mongodb.authentication-database=admin
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐