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(); } } }