将MongoTemplate与MongoClient和UserCredentials一起使用

时间:2017-08-27 21:05:34

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

其中一个应用程序使用MongoClient作为核心,与最近启用了身份验证的MongoDB进行交互。在这个mongoClient中初始化为:

mongoClient = new MongoClient(serverAddress, Arrays.asList(MongoCredential.createCredential(userName, dbName, password.toCharArray())));

然而,在许多地方,app使用mongoTemplate来查询数据。现在,如果将MongoTemplate创建为:

new MongoTemplate(mongoClient, dbName);

导致身份验证失败。

似乎将用户凭据传递给MongoTemplate的唯一方法是使用UserCredentials类

但是,如果我们将UserCredentials传递为:

    public MongoTemplate(Mongo mongo, String databaseName, UserCredentials userCredentials) {

结果是:

Usage of 'UserCredentials' with 'MongoClient' is no longer supported. Please use 'MongoCredential' for 'MongoClient' or just 'Mongo'.

似乎两个不同的API并行存在。什么是最好的方式,以便他们两个可以共同生活。

此应用使用mongodata版本为' 1.10.6.RELEASE'

3 个答案:

答案 0 :(得分:0)

试试这个:

MongoCredential mongoCredential = MongoCredential.createCredential("user", "database","password".toCharArray());
ServerAddress address = new ServerAddress("mymongo.mycompany.com", 62797);
MongoClient mongoClient = new MongoClient(address, Arrays.asList(mongoCredential));
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "database");

答案 1 :(得分:0)

尝试此配置:

@Configuration
public class MongoConfiguration {

    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
        UserCredentials userCredentials = new UserCredentials("YOUR_USER_NAME", "YOUR_PASSWORD");
        return new SimpleMongoDbFactory(new Mongo(), "YOUR_DATABASE", userCredentials);
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

要创建数据库存储库,只需使用MongoRepository,如下所示:

public interface UserRepository extends MongoRepository<User,Serializable>{
    User findById(String id);
}

答案 2 :(得分:0)

在这种情况下,似乎是在mongod服务器端应用用户身份验证的问题。

需要的身份验证已应用于mongo并已通过

验证
db.auth('user','pass'); 

命令结果为1.但是那时的数据库不存在。之后,首先通过插入虚拟记录创建数据库并分配权限。

应用程序将所有不同的数据库一起用于单元测试用例,在此问题到达时,看起来配置未正确应用。

修正后应用

 new MongoClient(serverAddress, Arrays.asList(MongoCredential.createCredential(userName, dbName, password.toCharArray())));

似乎工作正常。然而,同时mongo驱动程序错误有点神秘,没有太多解释导致调试耗时。