MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Verifique a autenticação do MongoDB com o driver Java 3.0


Os construtores do MongoClient não lançam nenhuma exceção relacionada à conectividade. Em vez disso, eles retornam imediatamente após iniciar um ou mais threads em segundo plano que tentam estabelecer uma conexão e autenticar com base nas credenciais fornecidas.

É somente quando um aplicativo usa o MongoClient para realizar alguma operação no servidor MongoDB que uma exceção será lançada. No entanto, essa exceção é uma exceção de tempo limite genérico que indica que o driver falhou ao localizar um servidor adequado para a operação antes que o tempo limite de seleção do servidor expire. Por exemplo:
    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
    }

lançará um MongoTimeoutException após 1 segundo. Embora nenhuma MongoSecurityException seja lançada, a mensagem da MongoTimeoutException conterá detalhes relevantes. Por exemplo, ao se conectar a uma réplica de três membros definida quando um dos servidores está inativo e a autenticação falhou nos dois restantes, o campo de mensagem do MongoTimeoutException será algo como:

Expirou após 1000 ms enquanto aguardava por um servidor que corresponda aReadPreferenceServerSelector{readPreference=primary}. A visualização do cliente do estado do cluster é {type=UNKNOWN, servers=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException:Exception opensocket}, causado por {java.net.ConnectException:Conexão recusada}},{address=localhost:27018, type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSecurityException:Exceptionauthenticating MongoCredential{mechanism=null, userName='username',source='admin', password=, mecanismoProperties={}}}, causado por{com.mongodb.MongoCommandException:Falha no comando com o erro 18:'Falha na autenticação.' no servidor localhost:27018. A resposta completa é { "ok" :0.0, "code" :18, "errmsg" :"Falha na autenticação." }}}]