简体   繁体   中英

MongoDB Java driver Authentication - Version mismatch issue?

Q - Cannot authenticate via Mongo Java Driver. Things work fine on mongo shell.

MongoDB Server Version -

db version v3.2.6

Java Mongodb Driver Maven Dependency

version 2.6.2

This is what I did -

  1. Start MongoDB - sudo mongod --port 27017 --dbpath /data/db
  2. Open shell - mongo --port 27017
  3. use admin
  4. db.createUser({user:"abc",pwd:"abc",roles:[{role:"root",db:"admin"}]})
  5. Restart with auth required - sudo mongod --auth --port 27017 --dbpath /data/db

Java side

MongoOptions moptions = new MongoOptions();
moptions.autoConnectRetry = Boolean.getBoolean(prop.getProperty("MONGO_OPTIONS_AUTOCONNECT_RETRY"));
moptions.connectionsPerHost = Integer.parseInt(prop.getProperty("MONGO_OPTIONS_CONNECTIONS_PER_HOST"));
moptions.threadsAllowedToBlockForConnectionMultiplier = Integer.parseInt(prop.getProperty("MONGO_OPTIONS_THREADS_BLOCK"));
ServerAddress srvAddr = new ServerAddress(prop.getProperty("MONGODB_HOST"),                     Integer.parseInt(prop.getProperty("MONGODB_PORT")));        
client = new Mongo(srvAddr, moptions);

DB adminDB = client.getDB("admin");
Boolean auth = adminDB.authenticate("abc", "abc".toCharArray());

Result

auth always comes out FALSE.

The authentication procedure for the MongoDB Java driver 2.x I know works as follows:

    MongoCredential credential = MongoCredential.createCredential(
            user, "admin", password.toCharArray());
    Mongo mongo = new MongoClient(new ServerAddress(mongoHostname), 
            Arrays.asList(credential));

Note for accessing a Mongo 3.2 database using a 2.x driver you need at least MongoDB Java driver Version 2.14 (see MongoDB compatibility info ). Your version 2.6.2 is way too old. You need to upgrade it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM