2016-09-17 5 views
0

안녕하세요 저는 java와 mongoDB에서 몇 가지 실험을하고 있습니다. 성공적으로 mongoDB를 설치하고 명령 줄을 통해 연결할 수 있습니다. 하지만 자바를 통해 연결하려고하면 인증 오류가 발생합니다.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] 
> 

와 자바 코드를 통해 : 나는 다음과 같은 방법으로 시도

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 쉘을 사용하여 로그인을 시도하면 db admin으로 인증됩니다. 그러나 코드에서 db testdb로 로그인 자격 증명을 평가하려고하는 것 같습니다.

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

두 위치에서 동일해야합니다.

+0

안녕하세요 아스트로 저는 당신을 못 보내고 있습니다. 좀 더 설명해 주시겠습니까? – 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

안녕하세요, 귀하의 솔루션을 사용해 보았습니다. 하지만 '인증에 실패했습니다.'라는 메시지가 나타납니다. on server localhost : 27017'을 내 사용자 이름과 암호로 사용하십시오. 'mongo -u admin -p admin123 --authenticationDatabase admin' 명령 줄을 사용하면 잘 동작합니다. – nilkash

+0

@nilkash [Robomongo] (https://robomongo.org/) 도구를 사용하여 TCP를 통해 Mongo에 성공적으로 인증 할 수있는 경우 시도하십시오 – Robert

+0

몇 가지 명령을 업데이트했습니다. 이와 같이 사용자를 생성했는지 확인하십시오. 또한 getUser를 실행하고 출력을 알려주십시오. 사용자 및 암호 세부 정보를 정확하게 반영하도록 Java 코드를 업데이트했습니다. 그것을 시도하십시오. createUser 명령을 사용하여 사용자를 만들고 코드를 실행했습니다. 그것은 잘 작동합니다. – notionquest