All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.axonframework.common.mongo.AuthenticatingMongoTemplate Maven / Gradle / Ivy

/*
 * Copyright (c) 2010-2014. Axon Framework
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.axonframework.common.mongo;

import com.mongodb.DB;
import com.mongodb.Mongo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Abstract implementation for Mongo templates. Mongo templates give access to the collections in a Mongo Database used
 * by components of the Axon Framework. The AuthenticatingMongoTemplate takes care of the authentication against the
 * Mongo database.
 *
 * @author Allard Buijze
 * @since 2.0
 */
public abstract class AuthenticatingMongoTemplate {

    private static final Logger logger = LoggerFactory.getLogger(AuthenticatingMongoTemplate.class);
    private static final String DEFAULT_AXONFRAMEWORK_DATABASE = "axonframework";

    private final String userName;
    private final char[] password;
    private final DB database;
    private final DB authenticationDatabase;

    /**
     * Initializes the MongoTemplate to connect using the given mongo instance and a database with default
     * name "axonframework". The given userName and password, when not null, are
     * used to authenticate against the database.
     *
     * @param mongo    The Mongo instance configured to connect to the Mongo Server
     * @param userName The username to authenticate with. Use null to skip authentication
     * @param password The password to authenticate with. Use null to skip authentication
     */
    protected AuthenticatingMongoTemplate(Mongo mongo, String userName, char[] password) { //NOSONAR
        this(mongo, DEFAULT_AXONFRAMEWORK_DATABASE, userName, password);
    }

    /**
     * Initializes the MongoTemplate to connect using the given mongo instance and the database with given
     * databaseName. The given userName and password, when not
     * null, are used to authenticate against the database.
     *
     * @param mongo        The Mongo instance configured to connect to the Mongo Server
     * @param databaseName The name of the database containing the data
     * @param userName     The username to authenticate with. Use null to skip authentication
     * @param password     The password to authenticate with. Use null to skip authentication
     */
    protected AuthenticatingMongoTemplate(Mongo mongo, String databaseName, String userName,
                                          char[] password) { // NOSONAR
        this(mongo, databaseName, databaseName, userName, password);
    }

    /**
     * Initializes the MongoTemplate to connect using the given mongo instance and the database with given
     * databaseName. The given userName and password, when not
     * null, are used to authenticate against the database.
     *
     * @param mongo        The Mongo instance configured to connect to the Mongo Server
     * @param databaseName The name of the database containing the data
     * @param userName     The username to authenticate with. Use null to skip authentication
     * @param password     The password to authenticate with. Use null to skip authentication
     */
    protected AuthenticatingMongoTemplate(Mongo mongo, String databaseName, String authenticationDatabaseName, String userName,
            char[] password) { // NOSONAR
        this.database = mongo.getDB(databaseName);
        this.authenticationDatabase = databaseName.equals(authenticationDatabaseName) ? database : mongo.getDB(authenticationDatabaseName);
        this.userName = userName;
        this.password = password;
    }

    /**
     * Returns a reference to the Database with the configured database name. If a username and/or password have been
     * provided, these are used to authenticate against the database.
     * 

* Note that the configured userName and password are ignored if the database is already * in an authenticated state. * * @return a DB instance, referring to the database with configured name. * * @see com.mongodb.DB#isAuthenticated() * @see DB#authenticate(String, char[]) */ protected DB database() { if (!authenticationDatabase.isAuthenticated() && (userName != null || password != null) && !authenticationDatabase.authenticate(userName, password)) { logger.warn("Failed to authenticate user '{}' against database '{}'. Incorrect credentials.", userName, authenticationDatabase.getName()); } return database; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy