【问题标题】:How can I connect to MongoDB server using JAVA from OpenShift?如何使用 OpenShift 中的 JAVA 连接到 MongoDB 服务器?
【发布时间】:2015-07-19 15:55:08
【问题描述】:

我在OpenShift 中创建了一个MongoDB 实例。我可以通过RockMongo 连接到它,这是OpenShift 提供的服务。

我正在尝试使用JAVA 连接到我的实例,但我只收到Connection refuesed 错误。此外,我无法使用RoboMongo 连接它。

在我的RockMongo 状态选项卡中,我看到以下信息:

Host: 127.11.201.2
Port: 27017

RoboMongoMongoLab 实例一起使用可以很好地为其提供正确的凭据,但在这里与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.2MONGO_URI。 为什么我无法连接到我的实例?我做错了什么?

PS 使用putty 我可以通过执行命令mongo 连接到我的mongo 实例。

【问题讨论】:

  • 是否有某种错误信息? This answer 建议将 MongoCredential 包装在 List<MongoCredential> 中,然后将列表传递给 MongoClient(...) 构造函数。
  • 这是一种非常奇怪的行为,因为我无法使用RoboMongo 等其他工具进行连接。在调查了一段时间后,我认为这不是程序问题。但是话说回来,我真的不知道为什么我的连接被拒绝了。
  • 是的,但是我需要弄清楚一些端口异常。我会在这周晚些时候试一试,并随时通知你。谢谢。

标签: java mongodb openshift robo3t


【解决方案1】:

OpenShift provides environment variables,您应该使用它来连接到您的 MongoDB。

  • OPENSHIFT_MONGODB_DB_HOSTMongoDB IP 地址
  • OPENSHIFT_MONGODB_DB_PORTMongoDB 端口
  • OPENSHIFT_MONGODB_DB_USERNAMEMongoDB 用户名
  • OPENSHIFT_MONGODB_DB_PASSWORDMongoDB 密码
  • OPENSHIFT_MONGODB_DB_URL MongoDB 连接 URL(例如 mongodb://<username>:<password>@<hostname>:<port>/

我用一行代码连接数据库:

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

【讨论】:

  • 但是,即使变量来自可能安全的来源,也应该对其进行清理,并且不要未经检查就使用。
  • 假设:有人设法操纵了一些或所有需要的环境变量的生成,但没有获得对生成的变量的读取权限。我会检查 IP 是否属于预期范围,以防止将凭据发送到未知主机。正向和反向查找以及随后检查值是否对应。接下来,它会检查复合 url 是否与各个部分匹配,是否是有效的 URL,并且不会设置不需要的连接参数,例如可能会破坏 SLA 的不适当的写入问题。
  • 其中一项测试失败可能表明存在安全问题,可能是我们的意外问题。
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 2017-12-13
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多