【问题标题】:Spring data-MongoDb Manual configurationSpring data-MongoDb 手动配置
【发布时间】:2020-09-29 12:44:32
【问题描述】:

我最终想要实现的是,从java类连接mongo db,这个配置应该适用于MongoTemplate和MongoRepository

spring boot 通过 application.properties 文件通过以下属性直接提供 mongodb 的配置

spring.data.mongodb.database=delivery
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.password=delivery-user
spring.data.mongodb.username=delivery-user

我需要使用 java 类本身连接到数据库,而不是这种方式, 这是因为我需要在属性文件中加密密码,然后从 java 类中解密 据我了解,我尝试在下面创建一个类

@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {

    @Override
    public MongoClient mongoClient() {
        String username = "delivery-user";
        String password = "delivery-user";
        String port = "27017";
        String host = "localhost";
        String db = "salesdata";
//have also tried by passing db name in conString
        String conString = "mongodb://" + username + ":" + password + "@" + host + ":" + port+"/?authSource=admin" ;
        MongoClient mClient = MongoClients.create(conString);
        return mClient;

    }

    @Override
    protected String getDatabaseName() {
        return "delivery";
    }

    @Bean
    @Override
    public MongoTemplate mongoTemplate() {
        MongoTemplate mt = new MongoTemplate(mongoClient(), getDatabaseName());
        return mt;
    }
}

运行此应用程序时出现此错误

 Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='delivery-user', source='admin', password=<hidden>, mechanismProperties={}}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='delivery-user', source='admin', password=<hidden>, mechanismProperties={}}

用户名和密码正确,用户也可以访问“delivery”数据库

【问题讨论】:

    标签: java spring spring-boot spring-data-mongodb


    【解决方案1】:

    在字符串末尾指定数据库名称并删除“authSource”将解决问题。 还指定“authSource=targetDBname”似乎正在工作。 工作连接字符串示例

    String conString = "mongodb://" + username + ":" + password + "@" + host + ":" + port+"/dbName";
    

    dbName 替换为用户有权访问的数据库名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 2015-04-29
      • 1970-01-01
      • 2016-06-05
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多