2015-05-08 3 views
2

Я создал экземпляр MongoDB в OpenShift. Я могу подключиться к нему через RockMongo, который является услугой, предлагаемой OpenShift.Как подключиться к серверу MongoDB с помощью JAVA из 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. Почему я не могу подключиться к моему экземпляру? Что я делаю не так?

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

+0

Есть ошибки в некотором роде? [Этот ответ] (http://stackoverflow.com/questions/21859579/authentication-during-connection-to-mongodb-server-instance-using-java) предлагает обернуть «MongoCredential» в «List », затем передайте список в конструктор 'MongoClient (...)'. – Vic

+0

Это очень странное поведение, поскольку я не могу подключиться с помощью других инструментов, таких как RoboMongo. Я предполагаю, что это не вопрос программирования после изучения его на некоторое время. Но опять же, я действительно не знаю, почему моя связь отрицается. – itaied

+0

Да, но у меня есть некоторые исключения для порта, которые мне нужно выяснить. Я попробую это позже на этой неделе и буду держать вас в курсе. Благодарю. – itaied

ответ

3

OpenShift provides environment variables, который вы должны использовать для подключения к вашему MongoDB.

  • OPENSHIFT_MONGODB_DB_HOST MongoDB IP адрес
  • 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>/)

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

new MongoClient(new MongoClientURI(System.getenv("OPENSHIFT_MONGODB_DB_URL"))); 
+0

Однако, даже если вары исходят из предположительно безопасного источника, их следует дезинфицировать и не использовать без контроля. –

+0

@MarkusWMahlberg: Какие проверки вы имеете в виду? –

+0

Успение: кому-то удалось манипулировать генерацией некоторых или всех необходимых окружений, не получая доступ на чтение к сгенерированным переменным. Я бы проверял, принадлежит ли IP к ожидаемому диапазону, чтобы предотвратить передачу учетных данных на неизвестный хост. Прямой и обратный поиск и последующая проверка, соответствуют ли значения.Затем проверьте, соответствует ли составной URL-адрес частям, действительный URL-адрес и не устанавливает параметры нежелательного соединения, такие как неподходящая проблема записи, которая может нарушить SLA. –