微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring data-MongoDb手动配置

如何解决Spring data-MongoDb手动配置

我最后要实现的是,从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类本身连接到db, 这是因为我需要在属性文件中加密密码,然后从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,mechanismProperties={}}

用户名密码正确用户也可以访问“传递”数据库

解决方法

在字符串末尾指定数据库名称并删除“ authSource”将解决此问题。 同时指定“ authSource=targetDBname”似乎可行。 连接字符串示例

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

dbName替换为用户可以访问的db名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。