1 Exception in thread "main" com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName=‘user‘, source=‘userdb‘, password=<hidden>, mechanismProperties={}} 2 Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): ‘Authentication failed.‘ on server 你的IP:你的端口. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }
出现以上springboot 2.x连接 mongdb 3.x的情况。
直面意思,就是指认证失败。
情况有4种,
1.你的认证方式有问题
2.认证信息有误(用户名密码等配错了)
3.mongodb数据库问题
4.springboot yml配置错误
1.你的认证方式有问题
SCRAM-SHA-1:就是mongodb 3.x之后默认的认证方式,springboot 2.x之后也是可以选择这种方式。
注意:mechanism=SCRAM-SHA-1。如果你不是这种方式,你就要升级你的springboot版本,或者去修改你的mongdb数据库的认证方式/降低mongodb版本。
你用纯javamongodb-driver包测试时,可见com.mongodb.MongoCredential 类下选取的认证方式来源于如下类。
public enum AuthenticationMechanism { GSSAPI("GSSAPI"), PLAIN("PLAIN"), MONGODB_X509("MONGODB-X509"), /** @deprecated */ @Deprecated MONGODB_CR("MONGODB-CR"), SCRAM_SHA_1("SCRAM-SHA-1"), SCRAM_SHA_256("SCRAM-SHA-256"); private static final Map<String, AuthenticationMechanism> AUTH_MAP = new HashMap(); private final String mechanismName; private AuthenticationMechanism(String mechanismName) { this.mechanismName = mechanismName; }
2.认证信息有误(用户名密码等配错了)
如果你手动,改错 数据库名或者用户名密码,你会发现也是会报这个错误。
3.mongdb数据库问题
用户权限问题。正确的用户创建如下:
use mydb #没有数据库会自动创建 #在此数据库下创建用户 db.createUser( { user: "user", pwd: "123456", roles: [ { role: "readWrite", db: "mydb" } ] } ) #重新进入,开启auth参数,认证通过后才能访问数据库 ./mongod -f mongdb.conf --auth db.auth("user","123456") 认证通过后可以操作数据库。
4.springboot yml配置错误
spring: application: name: test data: mongodb: host: 你的Ip username: user password: 123456 database: user port: 1234 #如果你是上面这种配置方式,那么恭喜你。他根本不会成功 #正确配置是如下这种方式 uri: mongodb://user:123456@你的Ip:1234/user