Java MongoDB:認証の例
デフォルトでは、MongoDBは信頼環境で実行されます(ユーザー名とパスワードによる認証は不要です)。 このチュートリアルでは、MongoDBをセキュアモードで起動し、認証を有効にし、Java MongoDBドライバーに接続する方法を示します。
1. セキュアモードでMongoDBを起動する
--authオプションを指定してMongoDBを起動します。ここで、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();
}
}
}