使用Java Spring连接到MongoDB 3.0

Luc*_*chi 7 java authentication spring mongodb

我在使用Spring访问带有凭据的MongoDB时遇到了问题.虽然没有凭据,它就像一个魅力,使用它们只是失败说

    Failed to authenticate to database [yourdatabase], username = [yourusername], password = [x******z] 
Run Code Online (Sandbox Code Playgroud)

必须是因为新的auth默认值,您可以在http://docs.mongodb.org/manual/core/authentication/中阅读

在3.0版中更改:SCRAM-SHA-1是从3.0系列开始的MongoDB版本的默认机制.

问:有人发现了一种使用Spring凭证的方法吗?spring-data-mongodb您使用哪个版本来制作技巧?

Luc*_*chi 16

经过大量的尝试和阅读,我找到了一种方法,使MongoDB 3.0可以使用身份验证.

这是MongoDB 3.0的新安装,不涉及升级.

我使用了这些maven依赖项:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.6.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

作为父母

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.2.RELEASE</version>
</parent>
Run Code Online (Sandbox Code Playgroud)

然后在我的配置文件中

/**
 * DB connection Factory
 * 
 * @return a ready to use MongoDbFactory
 */
@Bean
public MongoDbFactory mongoDbFactory() throws Exception {

    // Set credentials      
    MongoCredential credential = MongoCredential.createCredential(mongoUser, databaseName, mongoPass.toCharArray());
    ServerAddress serverAddress = new ServerAddress(mongoHost, mongoPort);

    // Mongo Client
    MongoClient mongoClient = new MongoClient(serverAddress,Arrays.asList(credential)); 

    // Mongo DB Factory
    SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(
            mongoClient, databaseName);

    return simpleMongoDbFactory;
}

/**
 * Template ready to use to operate on the database
 * 
 * @return Mongo Template ready to use
 */
@Bean
public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(mongoDbFactory());
}
Run Code Online (Sandbox Code Playgroud)

最后,只要您有权访问MongoTemplate bean,您就能够做到

mongoTemplate.insert(objectToStore, collectionName);
Run Code Online (Sandbox Code Playgroud)


Ali*_*ani 7

spring.data.mongodb.hostspring.data.mongodb.port如果您使用的是Mongo 3.0 Java驱动程序,则不受支持.在这种情况下,spring.data.mongodb.uri应该用于提供所有配置,如下所示:

spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345
Run Code Online (Sandbox Code Playgroud)

只需添加spring.data.mongodb.uri到您的application.yml,您将获得自动配置MongoDbFactoryMongoTemplate.