【问题标题】:MongoLab Authentication FailedMongoLab 认证失败
【发布时间】:2016-05-30 03:07:26
【问题描述】:

我已将我的 Web 应用程序上传到 Heroku,并且我有一个名为“MongoLab”的附加组件。我将 MongoLab 的凭据放入我的 Spring XML 文件中,当我运行它时,出现错误:

{"message":"Failed to authenticate to database [heroku_c82w85xw], username = [heroku_c82w85xw], password = [k************************c]","code":"org.springframework.data.mongodb.CannotGetMongoDbConnectionException

所以我还制作了一个包含凭据的 Java 配置文件,但我仍然遇到同样的错误。我已经尝试了几个星期,但我仍然遇到同样的错误。以下是我的 Spring XML 和 Java 配置文件。

Spring XML 文件:

    <mongo:mongo id="mongo" host="ds055575.mongolab.com" port="55575"/>

<mongo:db-factory 
    id="mongoDbFactory"
    host="ds055575.mongolab.com"
    port="55575"
    username="heroku_c82w85xw"
    password="XXX"
    dbname="heroku_c82w85xw"
    mongo-ref="mongo"/>

<bean id="anotherMongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />  
</bean>

<bean id="userDaoImpl" class="service.UserDaoImpl">
    <constructor-arg name="mongoOps" ref="anotherMongoTemplate" />
</bean>
<bean id="userService" class="service.UserService">
    <property name="userDaoImpl" ref="userDaoImpl" />
</bean>

Java 配置文件:

@Configuration
public class JavaConfig {
    public MongoClient getDB() {
        String uri = "mongodb://heroku_c82w85xw:XXX"
                + "@ds055575.mongolab.com:55575/heroku_c82w85xw?authMechanism=SCRAM-SHA-1";
        MongoClientURI mongoURI = new MongoClientURI(uri);
        MongoClient client = null;
        try {
            client = new MongoClient(mongoURI);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return client;
    }
}

有人可以帮我解决这个错误吗?提前致谢。

【问题讨论】:

  • 这个问题你解决了吗?我遇到了同样的问题,也尝试了几天。如果您已经解决了这个问题,请在您的问题下方写下您的答案。非常感谢!
  • 我已经解决了。我还必须将我的凭据放入我的 DAO 构造函数中,以便能够将 CRUD(创建、读取、更新和删除)应用于数据库。否则会显示“验证失败”。

标签: java spring-mvc heroku mlab


【解决方案1】:

您应该从 MongoLab 为您设置的环境变量中提取它,而不是对 URI 进行硬编码。这是一个例子:

String uri = System.getenv("MONGOLAB_URI");
MongoClientURI uri  = new MongoClientURI(uri); 
MongoClient client = new MongoClient(uri);
DB db = client.getDB(uri.getDatabase());

这是 MongoLab 在 documentation 中推荐的内容。

【讨论】:

  • 感谢您回复我。我尝试使用 System.getenv("MONGOLAB_URI") 但是当我打印出来时,它给了我一个空值。我正在研究制作环境变量,但系统无法识别它。我会再试一次,看看会发生什么。
  • 你是在本地运行还是在 Heroku 上运行?您需要手动设置本地环境变量。
  • 我从上面添加了代码并将其部署在 Heroku 中,它仍然显示相同的错误:“无法对数据库进行身份验证 [heroku_c82w85xw]”。
猜你喜欢
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 2021-03-07
  • 2019-09-03
  • 2014-07-19
  • 2015-10-17
相关资源
最近更新 更多