2016-09-17 2 views
0

Привет Я делаю некоторые эксперименты с java и mongoDB. Я успешно установил mongoDB и смог подключиться через командную строку. Но когда я пытаюсь подключиться через java, это дает мне ошибку аутентификации. Я старался следующим образом:Ошибка аутентификации Java mongo db

[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 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 оболочки. Но, в коде это выглядит, как вы пытаетесь оценить свои учетные данные с БД TESTDB

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

Оно должно быть одинаковым в обоих местах.

+0

Hi Astro Я тебя не понимаю. не могли бы вы объяснить больше. – nilkash

+0

Для чего db был создан администратор пользователя? – 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

Привет, я попробовал ваше решение. Но это дает мне «Ошибка аутентификации». на сервере localhost: 27017' для моего имени пользователя и пароля. Если вы попытаетесь с командной строкой 'mongo -u admin -p admin123 --authenticationDatabase admin', он отлично работает. – nilkash

+0

@nilkash Попробуйте, если вы можете успешно пройти аутентификацию в Mongo через TCP с помощью инструмента [Robomongo] (https://robomongo.org/) – Robert

+0

Я обновил несколько команд. Проверьте, создан ли пользователь таким образом. Также, пожалуйста, запустите getUser и сообщите нам о выходе. Я обновил код Java, чтобы точно отразить ваши данные о пользователе и пароле. Пожалуйста, попробуйте это. Я создал пользователя с помощью команды createUser и выполнил код. Он работает нормально. – notionquest

Смежные вопросы