MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Verifica l'autenticazione MongoDB con il driver Java 3.0

I costruttori MongoClient non generano eccezioni relative alla connettività. Piuttosto, ritornano immediatamente dopo aver avviato uno o più thread in background che tentano di stabilire una connessione e di autenticarsi in base alle credenziali fornite.

È solo quando un'applicazione utilizza MongoClient per eseguire alcune operazioni sul server MongoDB che verrà generata un'eccezione. Tuttavia, tale eccezione è un'eccezione di timeout generica che indica che il driver non è riuscito a trovare un server adatto per l'operazione prima della scadenza del timeout di selezione del server. Ad esempio:

    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
    }

genererà un MongoTimeoutException dopo 1 secondo. Sebbene non venga generata alcuna MongoSecurityException, il messaggio di MongoTimeoutException conterrà dettagli rilevanti. Ad esempio, quando ci si connette a una replica a tre membri impostata quando uno dei server è inattivo e l'autenticazione non è riuscita sui restanti due, il campo del messaggio di MongoTimeoutException sarà qualcosa del tipo:

Timeout dopo 1000 ms durante l'attesa di un server che corrisponde a ReadPreferenceServerSelector{readPreference=primary}. La vista client dello stato del cluster è {type=UNKNOWN, server=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException:Exception Openingsocket}, causato da {java.net.ConnectException:Connessione rifiutata}},{indirizzo=localhost:27018, tipo=SCONOSCIUTO, stato=CONNESSIONE,eccezione={com.mongodb.MongoSecurityException:autenticazione eccezionale MongoCredential{mechanism=null, userName='username',source='admin', password=, meccanismoProperties={}}}, causato da{com.mongodb.MongoCommandException:comando non riuscito con errore 18:'Autenticazione non riuscita.' sul server localhost:27018. La risposta completa è { "ok" :0.0, "code" :18, "errmsg" :"Autenticazione non riuscita." }}}]