2015-05-14 4 views
5

1 mit - Erstellt Benutzer in MongoBenutzer kann nicht in MongoDB authentifizieren 3.0.2 Java-Verbindung

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 - Verbunden mit Datenbank von Java

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

3 - Legen Sie eine Reihe

mongoTemplate.insert(animal, "animal"); 

4 - Erhalten Sie diesen Fehler (dieser Code funktioniert, wenn ich keine Authentifizierung verwenden)

2015-05-13 23:11:36.166 ERROR 67846 --- [nio-8443-exec-4] o.a.c.c.C.[.[.[/].[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) 

Antwort

15

ein wenig zu graben, und ich fand, dass Mongo 3 nicht gern Challenge-Response ist und bevorzugt 'MongoCredential.createScramSha1Credential'

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

Bitte beachten Sie diesen Link für weitere Details zu Authentifizierungsfehlern in mongo 3.0 aufgrund von Änderungen im Authentifizierungsmechanismus - http://www.claudiukuenzler.com/blog/553/authentication-mongodb-3.x-failed-with- mechanism-mongodb-C# .VkCO-64rLGI – IsAs

+0

Der Wechsel zu MongoCredential.createCredential funktionierte für mich. – cnmuc

0

Wenn die Maven-Abhängigkeit mit artefactId „spring-Boot mit -starter-data-mongodb "MongoCredential.createScramSha1Credential war nicht verfügbar.

Also hier ist, was ich zu tun hatte:

A) Fügen Sie die Maven-Abhängigkeit in der pom.xml MongoDB: von user4898172

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

B) Unter Verwendung der Lösung (MongoCredential .createScramSha1Credential)

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

    return new MongoClient(new ServerAddress(host, port), credentials); 
} 

Diese beiden Änderungen half mir lösen th e Exeption:

com.mongodb.CommandFailureException: { "serverUsed": "Entfernter_Server: 27017", "ok": 0.0 "errmsg": "Auth fehlgeschlagen", "Code" : 18}

(ich bin mit MongoDB-Server-Version: 3.4.0)

Die mongodb github site ist auch eine gute Referenz für die Implementierungsdetails.

Verwandte Themen