简体   繁体   中英

Java MongoDB Authentication Verification

I am trying to find a way to create a gui login for a database application that uses MongoDB. The server is 3.6 and the Java driver is 4.1.1. I can connect to the database and perform all CRUD operations via the application. I'm getting a little confused out how to write a simple authentication gui interface. It seems if I provide a bad username/password for access to the specific database, the main application still starts and it seems this is normal. I say normal because it doesn't seem like there is any authentication until you actually perform an operation on the collection. At the login screen if I pass a bad user/pass I can execute a listcollectionsNames() but its not only until I attempt to get the most recent objectId from a collection that authentication occurs.

My assumption was that using:

public DB(String username, String passwd) {
    this.user = username;
    this.password = passwd.toCharArray();
    database = "test";
    
    System.out.println("Username = " + user);
    System.out.println("Password = " + Arrays.toString(password));
    
    credential = MongoCredential.createCredential(user, database, password);

    settings = MongoClientSettings.builder()
        .credential(credential)
        .applyToSslSettings(builder -> {
            builder.enabled(true);
            builder.invalidHostNameAllowed(false);
                })
        .applyToClusterSettings(builder -> 
            builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
        .build();

    mongoClient = MongoClients.create(settings);

    MongoDataBase db = mongoClient.getDatabase(database);
    collection = db.getCollection("myTestCollection");
    System.out.println("Last record = " + getLastId());
    System.out.println("Current collections:\n" + database.listCollectionNames());
}

Would fully authenticate a login, much like mongo shell would.

Searching the internet I have found examples such as:

DB db = mongo.getDB("journaldev");
boolean auth = db.authenticate("pankaj", "pankaj123".toCharArray());

But I can't find anything similar to this command within the current driver.

Is the only way to verify authentication is to perform an operation and then pass that success/fail to the login gui?

Decided to just go with:

During the login process it performs the quickest operation (I think):

FindIterable cursor = collection.find().sort(new Document("_id", -1)).limit(1);

and then pass that success/fail to the login gui.

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