Проверка подлинности Java MongoDB

#java #mongodb #authentication

#java #mongodb #аутентификация

Вопрос:

Я пытаюсь найти способ создать логин с графическим интерфейсом для приложения базы данных, которое использует MongoDB. Сервер — 3.6, а драйвер Java — 4.1.1. Я могу подключиться к базе данных и выполнять все операции CRUD через приложение. Я немного запутался в том, как написать простой графический интерфейс аутентификации. Кажется, если я укажу неверное имя пользователя / пароль для доступа к конкретной базе данных, основное приложение все равно запустится, и кажется, что это нормально. Я говорю нормально, потому что кажется, что нет никакой аутентификации, пока вы на самом деле не выполните операцию над коллекцией. На экране входа в систему, если я передаю неверный user / pass, я могу выполнить listcollectionsNames(), но не только до тех пор, пока я не попытаюсь получить самый последний ObjectId из коллекции, в которой происходит аутентификация.

Я предполагал, что с помощью:

 public DB(String username, String passwd) {
    this.user = username;
    this.password = passwd.toCharArray();
    database = "test";
    
    System.out.println("Username = "   user);
    System.out.println("Password = "   Arrays.toString(password));
    
    credential = MongoCredential.createCredential(user, database, password);

    settings = MongoClientSettings.builder()
        .credential(credential)
        .applyToSslSettings(builder -> {
            builder.enabled(true);
            builder.invalidHostNameAllowed(false);
                })
        .applyToClusterSettings(builder -> 
            builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
        .build();

    mongoClient = MongoClients.create(settings);

    MongoDataBase db = mongoClient.getDatabase(database);
    collection = db.getCollection("myTestCollection");
    System.out.println("Last record = "   getLastId());
    System.out.println("Current collections:n"   database.listCollectionNames());
}
 

Будет полностью аутентифицировать логин, так же, как это сделала бы оболочка mongo.

Поиск в Интернете я нашел такие примеры, как:

 DB db = mongo.getDB("journaldev");
boolean auth = db.authenticate("pankaj", "pankaj123".toCharArray());
 

Но я не могу найти ничего похожего на эту команду в текущем драйвере.

Является ли единственный способ проверить аутентификацию — выполнить операцию, а затем передать этот успех / сбой в графический интерфейс входа?

Ответ №1:

Решил просто пойти с:

Во время процесса входа в систему он выполняет самую быструю операцию (я думаю):

 FindIterable<Document> cursor = collection.find().sort(new Document("_id", -1)).limit(1);
 

а затем передайте этот успех / сбой в графический интерфейс входа.