How to use Spring to connect to MongoDB which requires authentication

前端 未结 3 1801
遇见更好的自我
遇见更好的自我 2020-12-08 16:50

I am using the below Spring configuration in order to connect to mongoDB



        
相关标签:
3条回答
  • 2020-12-08 17:34

    found the solution using Spring Expression Language

    <bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">
            <constructor-arg name="mongo" ref="mongo"/>
            <constructor-arg name="databaseName" value="${mongodb.dbname}"/>
            <constructor-arg name="userCredentials" ref="mongoCredentials"/>
        </bean>
    
        <bean id="mongoCredentials" class="org.springframework.data.authentication.UserCredentials">
            <property name="username" value="#{mongoURI.username}" />
            <property name="password" value="#{new java.lang.String(mongoURI.password)}" />
        </bean>
    
        <bean class="com.mongodb.MongoURI" id="mongoURI">
            <constructor-arg value="${mongodb.url}"  />
        </bean>
    
        <bean class="com.mongodb.Mongo" id="mongo">
            <constructor-arg ref="mongoURI" />
        </bean>
    
    0 讨论(0)
  • 2020-12-08 17:36

    To update @Lealem Admassu's answer for java config, in Mongo 3 they changed the API, and now it is recommended to use mongo's MongoCredentials instead of UserCredentials.

    Here there is a simple example of how to get a MongoClient: http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.mongo-3.authentication

    The next code can be done modular, but more or less this works for me (I needed a MongoTemplate):

    public MongoTemplate getMongoTemplate(String host, int port,
                                          String authenticationDB,
                                          String database,
                                          String user, char[] password)
            throws UnknownHostException {
        return new MongoTemplate(
                new SimpleMongoDbFactory(
                        new MongoClient(
                                new ServerAddress(host, port),
                                Collections.singletonList(
                                        MongoCredential.createCredential(
                                                user,
                                                authenticationDB,
                                                password
                                        )
                                )
                        ),
                        database
                )
        );
    }
    
    0 讨论(0)
  • 2020-12-08 17:45

    If you want to add authntication using java config

    @Configuration
    @EnableMongoRepositories("path.to.your.repository")
    public class MongoConfig extends AbstractMongoConfiguration
    {
    @Value("${mongodb.name}")
    private String  dbName;
    
    @Value("${mongodb.host}")
    private String  host;
    
    @Value("${mongodb.port}")
    private Integer port;
    
    @Value("${mongodb.username}")
    private String  userName;
    
    @Value("${mongodb.password}")
    private String  password;
    
    
    @Override
    protected String getDatabaseName()
    {
        return this.dbName;
    }
    
    @Override
    public Mongo mongo() throws Exception
    {
        return new MongoClient(this.host, this.port);
    }
    
    @Override
    @Bean
    public SimpleMongoDbFactory mongoDbFactory() throws Exception
    {
        return new SimpleMongoDbFactory(mongo(), getDatabaseName());
    }
    
    @Override
    @Bean
    public MongoTemplate mongoTemplate() throws Exception
    {
        final UserCredentials userCredentials = new UserCredentials(this.userName, this.password);
    
        final MongoTemplate mongoTemplate = new MongoTemplate(mongo(), getDatabaseName(), userCredentials);
        mongoTemplate.setWriteConcern(WriteConcern.SAFE);
    
        return mongoTemplate;
    }
    
    }
    
    0 讨论(0)
提交回复
热议问题