Как я могу подключиться к серверу MongoDB с помощью JAVA из OpenShift?

Я создал экземпляр MongoDB в OpenShift. Я могу подключиться к нему через RockMongo, который является услугой, предлагаемой OpenShift.

Я пытаюсь подключиться к своему экземпляру с помощью JAVA, но получаю сообщение об ошибке Connection refuesed. Более того, я не могу подключить его с помощью RoboMongo.

На вкладке состояния RockMongo я вижу следующую информацию:

Host: 127.11.201.2
Port: 27017

Использование RoboMongo с экземпляром MongoLab прекрасно работает, предоставляя ему правильные учетные данные, но здесь с OpenShift происходит сбой при подключении к экземпляру.

В моем приложении JAVA я пытаюсь сделать следующее:

MongoCredential credential = MongoCredential.createCredential(
                Const.MONGO_USERNAME, Cont.MONGO_DB,
                Const.MONGO_PASSWORD.toCharArray());
        mongo = new MongoClient(new ServerAddress(Const.MONGO_URI), Arrays.asList(credential));

С 127.11.201.2 как MONGO_URI. Почему мне не удается подключиться к моему экземпляру? Что я делаю не так?

PS, используя putty, я могу подключиться к своему экземпляру mongo, просто выполнив команду mongo.


person itaied    schedule 08.05.2015    source источник
comment
Есть ли какое-то сообщение об ошибке? Этот ответ предлагает обернуть MongoCredential в List<MongoCredential>, затем передать список конструктору MongoClient(...).   -  person Vic    schedule 08.05.2015
comment
Это очень странное поведение, поскольку я не могу подключиться с помощью других инструментов, таких как RoboMongo. Я предполагаю, что это не программный вопрос после некоторого изучения его. Но опять же, я действительно не знаю, почему мне отказывают в соединении.   -  person itaied    schedule 08.05.2015
comment
Да, но у меня есть некоторые исключения портов, которые мне нужно выяснить. Я попробую позже на этой неделе и буду держать вас в курсе. Спасибо.   -  person itaied    schedule 11.05.2015


Ответы (1)


OpenShift предоставляет переменные среды, которые вы должны использовать для подключения к своей базе данных MongoDB.

  • OPENSHIFT_MONGODB_DB_HOST IP-адрес MongoDB
  • OPENSHIFT_MONGODB_DB_PORT Порт MongoDB
  • OPENSHIFT_MONGODB_DB_USERNAME Имя пользователя MongoDB
  • OPENSHIFT_MONGODB_DB_PASSWORD Пароль MongoDB
  • OPENSHIFT_MONGODB_DB_URL URL-адрес подключения MongoDB (например, mongodb://<username>:<password>@<hostname>:<port>/)

Я использую одну строку кода для подключения к базе данных:

new MongoClient(new MongoClientURI(System.getenv("OPENSHIFT_MONGODB_DB_URL")));
person Christian Strempfer    schedule 08.05.2015
comment
Однако, даже если vars поступают из предположительно безопасного источника, их следует дезинфицировать и не использовать без проверки. - person Markus W Mahlberg; 09.05.2015
comment
Предположение: кому-то удалось манипулировать генерацией некоторых или всех необходимых переменных среды, не получив доступа для чтения к сгенерированным переменным. Я бы проверил, принадлежит ли IP к ожидаемому диапазону, чтобы предотвратить отправку учетных данных на неизвестный хост. Прямой и обратный просмотр и последующая проверка соответствия значений. Затем он проверяет, соответствует ли составной URL-адрес частям, является ли он допустимым URL-адресом и не устанавливает ли нежелательные параметры подключения, такие как неуместная проблема записи, которая может нарушить SLA. - person Markus W Mahlberg; 09.05.2015
comment
Сбой в одном из этих тестов может указывать на проблему безопасности, будь то предполагаемая случайная проблема. - person Markus W Mahlberg; 09.05.2015