#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);
а затем передайте этот успех / сбой в графический интерфейс входа.