MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Überprüfen Sie die MongoDB-Authentifizierung mit dem Java 3.0-Treiber

Die MongoClient-Konstruktoren lösen keine konnektivitätsbezogenen Ausnahmen aus. Stattdessen kehren sie unmittelbar nach dem Starten eines oder mehrerer Hintergrundthreads zurück, die versuchen, eine Verbindung herzustellen und sich anhand der bereitgestellten Anmeldeinformationen zu authentifizieren.

Nur wenn eine Anwendung den MongoClient verwendet, um eine Operation auf dem MongoDB-Server auszuführen, wird eine Ausnahme ausgelöst. Diese Ausnahme ist jedoch eine generische Timeout-Ausnahme, die angibt, dass der Treiber keinen geeigneten Server für die Operation finden konnte, bevor das Serverauswahl-Timeout abläuft. Zum Beispiel:

    MongoClient client = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27018")),
                                         singletonList(MongoCredential.createCredential("username",
                                                                                        "admin",
                                                                                        "bad".toCharArray())),
                                         MongoClientOptions.builder().serverSelectionTimeout(1000).build());


    try {
        client.getDB("admin").command("ping");
    } catch (MongoTimeoutException e) {
        // do something
    }

löst nach 1 Sekunde eine MongoTimeoutException aus. Während keine MongoSecurityException ausgelöst wird, enthält die Nachricht der MongoTimeoutException relevante Details. Wenn beispielsweise eine Verbindung zu einem Replikatsatz mit drei Mitgliedern hergestellt wird, wenn einer der Server ausgefallen ist und die Authentifizierung auf den verbleibenden zwei fehlgeschlagen ist, sieht das Nachrichtenfeld der MongoTimeoutException etwa so aus:

Zeitüberschreitung nach 1000 ms beim Warten auf einen Server, der mit ReadPreferenceServerSelector{readPreference=primary} übereinstimmt. Clientansicht des Clusterstatus ist {type=UNKNOWN, server=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException:Exception openingsocket}, verursacht durch {java.net.ConnectException:Verbindung abgelehnt}},{address=localhost:27018, type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSecurityException:Exceptionauthenticating MongoCredential{mechanism=null, userName='username',source='admin', password=,mechanicalProperties={}}}, verursacht durch{com.mongodb.MongoCommandException:Command failed with error 18:'Authentication failed.' auf dem Server localhost:27018. Die vollständige Antwort ist { "ok" :0.0, "code" :18, "errmsg" :"Authentifizierung fehlgeschlagen." }}}]