spring cloud之路_springboot 和 mongdb连接问题

时间:2021-09-19 17:46:36

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