Intereting Posts
Как отсортировать отсортированный массив в максимально сжатые сроки? (Ява) JSOUP добавляет дополнительные закодированные материалы для html Как я могу использовать ImageJ в качестве библиотеки для отдельного приложения Java? Событие KeyPressed и mousePressed в несфокусированном компоненте Есть ли принятая передовая практика по созданию асинхронных HTTP-запросов в Android? Как я могу запустить мой TimerTask каждый день 2 PM Утечка памяти JDBC Java MySQL строка java разделена на все не-буквенно-цифровые, кроме апострофов Как создать BufferedImage из необработанных данных Задержка изображения слайдов Java с использованием paintComponent Изображения не загружаются, если они имеют большой размер Как сохранить строковые значения в файле context.xml Как перейти от managedQuery к LoaderManager / CursorLoader? Слишком сложно использовать BufferedWriter и BufferedOutputStream? Массовая вставка в Java с использованием подготовленных операторов пакетного обновления

Не удается аутентифицировать пользователя в MongoDB 3.0.2 с использованием java-соединения

1 – Создатель пользователя в mongo shell

> use admin switched to db admin > db.createUser( { user:"tiger", pwd:"secret", roles: [ { role:"readWrite", db:"zoo" } ] } ) Successfully added user: { "user" : "tiger", "roles" : [ { "role" : "readWrite", "db" : "zoo" } ] } 

2 – подключен к базе данных с Java

 List seeds = new ArrayList(); seeds.add( new ServerAddress( "remoteserver" )); List credentials = new ArrayList(); credentials.add( MongoCredential.createMongoCRCredential( "tiger", "admin", "secret".toCharArray() ) ); MongoClient mongoClient = new MongoClient( seeds); //, credentials ); MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, "zoo"); 

3 – Вставить строку

 mongoTemplate.insert(animal, "animal"); 

4 – Получите эту ошибку (этот код работает, когда я не использую аутентификацию)

 2015-05-13 23:11:36.166 ERROR 67846 --- [nio-8443-exec-4] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mongodb.UncategorizedMongoDbException: { "serverUsed" : "remoteserver:27017" , "ok" : 0.0 , "errmsg" : "auth failed" , "code" : 18}; nested exception is com.mongodb.CommandFailureException: { "serverUsed" : "remoteserver:27017" , "ok" : 0.0 , "errmsg" : "auth failed" , "code" : 18}] with root cause com.mongodb.CommandFailureException: { "serverUsed" : "remoteserver:27017" , "ok" : 0.0 , "errmsg" : "auth failed" , "code" : 18} at com.mongodb.CommandResult.getException(CommandResult.java:76) at com.mongodb.CommandResult.throwOnError(CommandResult.java:131) at com.mongodb.DBPort$NativeAuthenticator.authenticate(DBPort.java:652) at com.mongodb.DBPort.authenticate(DBPort.java:364) at com.mongodb.DBPort.checkAuth(DBPort.java:375) at com.mongodb.DBTCPConnector.doOperation(DBTCPConnector.java:206) at com.mongodb.DBCollectionImpl.writeWithCommandProtocol(DBCollectionImpl.java:424) at com.mongodb.DBCollectionImpl.insertWithCommandProtocol(DBCollectionImpl.java:389) at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:188) at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:167) at com.mongodb.DBCollection.insert(DBCollection.java:93) at com.mongodb.DBCollection.insert(DBCollection.java:78) at com.mongodb.DBCollection.insert(DBCollection.java:120) at org.springframework.data.mongodb.core.MongoTemplate$8.doInCollection(MongoTemplate.java:904) at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:410) at org.springframework.data.mongodb.core.MongoTemplate.insertDBObject(MongoTemplate.java:899) at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:721) at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:676) 

Немного копая, и я обнаружил, что Mongo 3 не любит вызов-ответ и предпочитает « MongoCredential.createScramSha1Credential »,

 List seeds = new ArrayList(); seeds.add( new ServerAddress( "remoteServer" )); List credentials = new ArrayList(); credentials.add( MongoCredential.createScramSha1Credential( "username", "adminDatabase", "password".toCharArray() ) ); MongoClient mongoClient = new MongoClient( seeds, credentials ); MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, "applicationDatabase"); mongoTemplate = new MongoTemplate(mongoDbFactory); 

При использовании зависимости maven с artefactId «spring-boot-starter-data-mongodb» MongoCredential.createScramSha1Credential недоступен.

Итак, вот что я должен был сделать:

A) Включите зависимость maven от mongodb в pom.xml :

  org.mongodb mongo-java-driver 3.4.0  

B) Используя решение от user4898172 ( MongoCredential.createScramSha1Credential )

 public Mongo mongo() throws Exception { List credentials = new ArrayList<>(); credentials.add(MongoCredential.createScramSha1Credential(username, database, password.toCharArray())); return new MongoClient(new ServerAddress(host, port), credentials); } 

Эти два изменения помогли мне решить Exeption:

com.mongodb.CommandFailureException: {“serverUsed”: “remoteserver: 27017”, “ok”: 0.0, “errmsg”: “auth failed”, “code”: 18}

(Я использую версию сервера MongoDB: 3.4.0)

Сайт mongodb github также является хорошей ссылкой для деталей реализации.