sql >> Base de Datos >  >> NoSQL >> MongoDB

Compruebe la autenticación MongoDB con el controlador Java 3.0

Los constructores de MongoClient no lanzan ninguna excepción relacionada con la conectividad. Más bien, regresan inmediatamente después de iniciar uno o más subprocesos en segundo plano que intentan establecer una conexión y autenticarse en función de las credenciales proporcionadas.

Solo cuando una aplicación usa MongoClient para realizar alguna operación en el servidor MongoDB, se lanzará una excepción. Sin embargo, esa excepción es una excepción de tiempo de espera genérico que indica que el controlador no pudo encontrar un servidor adecuado para la operación antes de que caduque el tiempo de espera de selección del servidor. Por ejemplo:

    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
    }

lanzará una MongoTimeoutException después de 1 segundo. Si bien no se lanza MongoSecurityException, el mensaje de MongoTimeoutException contendrá detalles relevantes. Por ejemplo, al conectarse a un conjunto de réplicas de tres miembros cuando uno de los servidores está inactivo y la autenticación falló en los dos restantes, el campo de mensaje de MongoTimeoutException será algo así como:

Se agotó el tiempo de espera después de 1000 ms mientras esperaba un servidor que coincida con ReadPreferenceServerSelector{readPreference=primary}. La vista del cliente del estado del clúster es {tipo=DESCONOCIDO, servidores=[{dirección=localhost:27017,tipo=DESCONOCIDO, estado=CONECTANDO,excepción={com.mongodb.MongoSocketOpenException:excepción al abrir el socket}, causada por {java.net.ConnectException:Conexión rechazada}},{dirección=localhost:27018, tipo=DESCONOCIDO, estado=CONECTANDO,excepción={com.mongodb.MongoSecurityException:excepción al autenticar MongoCredential{mecanismo=null, nombre de usuario='nombre de usuario', fuente='admin', contraseña=, mecanismoProperties={}}}, causado por{com.mongodb.MongoCommandException:el comando falló con el error 18:'Autenticación fallida'. en servidor localhost:27018. La respuesta completa es { "ok":0.0, "código":18, "errmsg":"Autenticación fallida". }}}]