MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Vérifier l'authentification MongoDB avec le pilote Java 3.0

Les constructeurs MongoClient ne lèvent aucune exception liée à la connectivité. Au lieu de cela, ils reviennent immédiatement après le démarrage d'un ou plusieurs threads d'arrière-plan qui tentent d'établir une connexion et de s'authentifier en fonction des informations d'identification fournies.

Ce n'est que lorsqu'une application utilise le MongoClient pour effectuer une opération sur le serveur MongoDB qu'une exception sera levée. Cependant, cette exception est une exception de délai d'attente générique indiquant que le pilote n'a pas réussi à trouver un serveur approprié pour l'opération avant l'expiration du délai de sélection du serveur. Par exemple :

    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èvera une MongoTimeoutException après 1 seconde. Bien qu'aucune MongoSecurityException ne soit levée, le message de MongoTimeoutException contiendra les détails pertinents. Par exemple, lors de la connexion à un ensemble de réplicas à trois membres lorsque l'un des serveurs est en panne et que l'authentification a échoué sur les deux autres, le champ de message de MongoTimeoutException ressemblera à :

Expiration du délai après 1 000 ms lors de l'attente d'un serveur correspondant à ReadPreferenceServerSelector{readPreference=primary}. La vue client de l'état du cluster est {type=UNKNOWN, servers=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException :Exception openingsocket}, causée par {java.net.ConnectException :Connexion refusée}},{address=localhost:27018, type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSecurityException :Exceptionauthenticating MongoCredential{mechanism=null, userName='username',source='admin', password=, mecanismProperties={}}}, causé par {com.mongodb.MongoCommandException :La commande a échoué avec l'erreur 18 : 'Échec de l'authentification.' sur le serveur localhost:27018. La réponse complète est { "ok" :0.0, "code" :18, "errmsg" :"Échec de l'authentification." }}}]