Java MongoDB: пример аутентификации

Java MongoDB: пример аутентификации

По умолчанию MongoDB запускается в доверенной среде (аутентификация с использованием имени пользователя и пароля НЕ требуется). В этом руководстве мы покажем вам, как запустить MongoDB в безопасном режиме / включить аутентификацию и подключиться к драйверу Java MongoDB.

1. Запустите MongoDB в безопасном режиме

Запустите MongoDB с параметром--auth, теперь MongoDB требуется имя пользователя и пароль для выполнения любых операций с базой данных / сбором данных.

mongod --auth

Позже нам нужно будет подключиться к базе данных testdb, поэтому добавим пользователя для тестирования позже.

> use admin
> db.addUser("admin","password")
> use testdb
> db.addUser("example","password")

Чтобы включить аутентификацию MongoDB, вы должны сначала добавить пользователя в специальную базу данных «admin», пожалуйста, обратитесь к этомуMongoDB authentication example для получения подробного руководства.

2. Пример аутентификации Java + MongoDB

Если MongoDB запущен в безопасном режиме, операция «вставка» ниже недействительна и выводит сообщение об ошибке «необходимо войти».

    Mongo mongo = new Mongo("localhost", 27017);
    DB db = mongo.getDB("testdb");

    DBCollection table = db.getCollection("user");

    BasicDBObject document = new BasicDBObject();
    document.put("name", "example");
    table.insert(document);
com.mongodb.CommandResult$CommandFailure: command failed [getlasterror]:
    { "serverUsed" : "localhost/127.0.0.1:27017" , "errmsg" : "need to login" , "ok" : 0.0}

    at com.mongodb.CommandResult.getException(CommandResult.java:88)
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
    at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:142)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:183)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:270)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
    at com.mongodb.DBCollection.insert(DBCollection.java:75)
    at com.mongodb.DBCollection.insert(DBCollection.java:59)
    at com.mongodb.DBCollection.insert(DBCollection.java:104)
    at com.example.core.App.main(App.java:40)

Теперь, используяdb.authenticate() для выполнения аутентификации, возвращаемое значение true = успех, false = неудача.

package com.example.core;

import java.net.UnknownHostException;
import java.util.Date;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

/**
 * Java + MongoDB in Secure Mode
 *
 */
public class JavaMongoDBAuthExample {
   public static void main(String[] args) {

    try {

    Mongo mongo = new Mongo("localhost", 27017);
    DB db = mongo.getDB("testdb");

    boolean auth = db.authenticate("testdb", "password".toCharArray());
    if (auth) {

        DBCollection table = db.getCollection("user");

        BasicDBObject document = new BasicDBObject();
        document.put("name", "example");
        table.insert(document);

        System.out.println("Login is successful!");
    } else {
        System.out.println("Login is failed!");
    }
    System.out.println("Done");

    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (MongoException e) {
    e.printStackTrace();
    }
  }
}