sql >> Database >  >> NoSQL >> MongoDB

Controleer MongoDB-authenticatie met Java 3.0-stuurprogramma

De MongoClient-constructors genereren geen connectiviteitsgerelateerde uitzonderingen. In plaats daarvan keren ze onmiddellijk terug na het starten van een of meer achtergrondthreads die proberen een verbinding tot stand te brengen en te verifiëren op basis van de verstrekte inloggegevens.

Alleen wanneer een toepassing de MongoClient gebruikt om een ​​bewerking op de MongoDB-server uit te voeren, wordt er een uitzondering gegenereerd. Die uitzondering is echter een algemene time-outuitzondering die aangeeft dat het stuurprogramma geen geschikte server voor de bewerking heeft gevonden voordat de time-out voor serverselectie verloopt. Bijvoorbeeld:

    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
    }

gooit na 1 seconde een MongoTimeoutException. Hoewel er geen MongoSecurityException wordt gegenereerd, bevat het bericht van de MongoTimeoutException relevante details. Als u bijvoorbeeld verbinding maakt met een replicaset met drie leden wanneer een van de servers niet beschikbaar is en de authenticatie op de overige twee is mislukt, ziet het berichtveld van de MongoTimeoutException er ongeveer zo uit:

Time-out na 1000 ms tijdens het wachten op een server die overeenkomt met ReadPreferenceServerSelector{readPreference=primary}. Clientweergave van clusterstatus is {type=UNKNOWN, servers=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException:Exception openingocket}, veroorzaakt door {java.net.ConnectException:Verbinding geweigerd}},{address=localhost:27018, type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSecurityException:Exceptionauthenticating MongoCredential{mechanism=null, userName='username',source='admin', password=, mechanicProperties={}}}, veroorzaakt door{com.mongodb.MongoCommandException:Opdracht is mislukt met fout 18:'Verificatie mislukt.' op server localhost:27018. Het volledige antwoord is { "ok":0.0, "code":18, "errmsg":"Verificatie mislukt." }}}]




  1. stel de vervalsleutel in op een specifiek tijdstip bij gebruik van Spring-caching met Redis

  2. mangoest schema maken

  3. Redis binden aan meer dan één IP

  4. redis-verbindingsfout in docker-container