Ich bin sehr neu in der MOngoDB + Java-Konfiguration. Ich versuche, die Verbindung von Remote-Mongodb-Server von Java-Anwendung zu erreichen. Ich möchte GSSAPI-Mechanismus für die Verbindung mit Mongotemplate verwenden. Der folgende Code wurde erfolgreich ausgeführt. Der folgende Code stammt aus meiner Konfigurationsdatei.GSSException: Keine gültigen Anmeldeinformationen zur Verfügung gestellt (Mechanismus-Ebene: Kerberos tgt konnte nicht gefunden werden)
List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
ServerAddress address = new ServerAddress(host, port);
serverAddresses.add(address);
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
MongoCredential credential = MongoCredential.createGSSAPICredential(userName);
credential.withMechanismProperty("SERVICE_NAME", gssapiServiceName);
credential.withMechanismProperty("CANONICALIZE_HOST_NAME", true);
credentials.add(credential);
return new MongoClient(serverAddresses, credentials);
Aber wenn ich versuche, unter Code ausführen ich erhalte Ausnahme
DB db = mongoTemplate.getDb();
Set<String> dbCollections1 = db.getCollectionNames();
Ausnahme:
GSSException: Keine gültige Anmeldeinformationen zur Verfügung gestellt (Mechanism Ebene: Fehler alle Kerberos TGT finden) bei sun.security.jgss.krb5.Krb5InitCredential.getInstance (Krb5InitCredential.java:147) bei sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement (Krb 5MechFactory.java:122) bei sun.security.jgss.GSSManagerImpl.getCredentialElement (GSSManagerImpl.java:193) bei sun.security.jgss.GSSCredentialImpl.add (GSSCredentialImpl.java:427) bei sun.security.jgss. GSSCredentialImpl. (GSSCredentialImpl.java:62) bei sun.security.jgss.GSSManagerImpl.createCredential (GSSManagerImpl.java:154) bei com.mongodb.DBPort $ GSSAPIAuthenticator.getGSSCredential (DBPort.java:622) bei com.mongodb .DBPort $ GSSAPIAuthenticator.createSaslClient (DBPort.java:593) bei com.mongodb.DBPort $ SaslAuthenticator.authenticate (DBPort.java:895) bei com.mongodb.DBPort.authenticate (DBPort.java:432) bei com .mongodb.DBPort.checkAuth (DBPort.java:443) bei com.mongodb.DBTCPConnec tor.innerCall (DBTCPConnector.java:289) bei com.mongodb.DBTCPConnector.call (DBTCPConnector.java:269) bei com.mongodb.DBCollectionImpl.find (DBCollectionImpl.java:84) bei com.mongodb.DB. Befehl (DB.java:320) bei com.mongodb.DB.command (DB.java:299) bei com.mongodb.DB.command (DB.java:388) bei com.mongodb.DBApiLayer.getCollectionNames (DBApiLayer.java:152)
Ich weiß nichts über MongoDB, aber diese Fehlermeldung bedeutet, dass GSSAPI denkt, dass Sie Kerberos-Protokoll verwenden möchten - ist das wahr? Wenn ja, haben Sie die Konfiguration zur Verfügung gestellt, um GSSAPI mitzuteilen, wie der Kerberos-Server kontaktiert werden soll? und * (a) * wo das vorhandene Kerberos-Ticket zwischengespeichert wird, oder * (b) * Wie finde ich das Passwort und erstelle das Ticket im laufenden Betrieb? Übrigens, wenn Sie eine Sun/Oracle JVM verwenden, haben Sie die JARs mit der "Unlimited Strength Crypto" -Richtlinie heruntergeladen, um die AES256-Verschlüsselung zu aktivieren? –
Ja, ich möchte das Kerberos-Protokoll verwenden. Ich habe zwei Systemumgebungsvariablen 1 gesetzt. KRB5_CONFIG = krb5.conf 2.KRB5_KTNAME = username.keytab Das habe ich für die Konfigurationsperspektive getan. Ich greife von der Java-Webanwendung auf diesen mongodb-Server zu. Ich hoffe, ich kann Ihnen eine Antwort auf Ihre Fragen geben. –
Werfen Sie einen Blick auf http://stackoverflow.com/questions/21375372/accessing-hive-metastore-using-jdbc-with-kerberos-keytab für die schmutzigen Details der Einstellung der Kerberos conf (na ja, einige der Details) –