2016-09-17 8 views
0

こんにちは、私はjavaとmongoDBでいくつかの実験をしています。私は正常にmongoDBをインストールし、コマンドラインを介して接続することができます。しかし、私はjavaを介して接続しようとすると、それは私に認証のエラーを与える。Java mongo db authentication failed

[email protected]:~$ mongo -u admin -p admin123 --authenticationDatabase admin 
MongoDB shell version: 3.2.9 
connecting to: test 
Server has startup warnings: 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] **  We suggest setting it to 'never' 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] **  We suggest setting it to 'never' 
2016-09-17T16:29:31.090+0530 I CONTROL [initandlisten] 
> 

とJavaコードを通して:私は、次のように試してみました

package mongo; 

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

/** 
* Java + MongoDB Hello world Example 
* 
*/ 
public class App { 
    public static void main(String[] args) { 

    try { 

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

     boolean auth = db.authenticate("admin", "admin123".toCharArray()); 

    if (auth) { 

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

    } 
} 

とそれに対する結果だ:何か問題が

Login is failed! 
Done 

ありますか?助けが要る。ありがとうございました。

+0

Y ouはMongo Java driver v2の構文を使用しています。 Mongo3構文(MongoClientとMongoCredentials)へのより良い切り替え:http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/ http://www.programcreek.com/java-api -examples/index.php?api = com.mongodb.MongoCredential – Robert

+0

testdbが間違っている、テストする必要があります。試してみてください、これが助けてくれれば教えてください – harshavmb

答えて

0
mongo -u admin -p admin123 --authenticationDatabase admin 

あなたはmongoシェルを使用してログインしようとすると、管理者のDBへの認証されています。しかし、db testdbでログイン資格を評価しようとしているようです。

DB db = mongo.getDB("testdb"); 

両方の場所で同じでなければなりません。

+0

こんにちはアストロ私はあなたを取得していません。もっと説明してください。 – nilkash

+0

どのユーザーの管理者が作成されたのですか? – Astro

1

MongoDB 3.2の最新バージョンでは、デフォルトの認証メカニズムは "SCRAM-SHA-1"です。この認証には別のクラスが用意されています。私はこの最新のアプローチを使用することをお勧めします。

詳細については、linkを参照してください。以下

例: - それに応じて、以下のコードで

ただ、データベース名、ユーザー名、パスワードを入力します。それはあなたのために働くはずです。

public static void main(String[] args) { 

MongoClient mongoClient = null; 
     MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("admin", "admin", 
       "admin123".toCharArray()); 

     mongoClient = new MongoClient(new ServerAddress("localhost", 27017), Arrays.asList(mongoCredential)); 

     DB db = mongoClient.getDB("testdb"); 

     System.out.println(db.getStats()); 
     System.out.println(db.getCollectionNames()); 

     mongoClient.close(); 
    } 

依存関係: -

<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongo-java-driver</artifactId> 
    <version>3.2.2</version> 
</dependency> 

ユーザの作成: -

use admin; 

db.createUser({ user : "admin", pwd : "admin123", roles : ["dbAdmin"]}); 

ユーザの詳細を確認するには: -

use admin; 

db.getUsers(); 
+0

こんにちは私はあなたの解決策を試みました。しかし、それは私に ''認証に失敗しました。 on server localhost:27017'と入力してください。 'mongo -u admin -p admin123 --authenticationDatabase admin'コマンドラインで試してみるとうまくいきます。 – nilkash

+0

@nilkash [Robomongo](https://robomongo.org/)ツール – Robert

+0

を使用して、TCP経由でMongoに正常に認証できるかどうか試してみてください。このようにユーザーを作成したかどうかを確認してください。また、getUserを実行し、出力をお知らせください。あなたのユーザーとパスワードの詳細を正確に反映するようにJavaコードを更新しました。それを試してください。私はcreateUserコマンドを使用してユーザーを作成し、コードを実行しました。それはうまく動作します。 – notionquest