spring-data-mongodb给出mongodb身份验证异常

我在用

  • Mongodb 3.2.0
  • Mongo-Java驱动程序3.2.0
  • 弹簧数据mongodb 1.9.2

并引用此链接access -mongodb-with-authentication,并通过以admin身份登录到admin数据库在myDb中创建了用户。

    db.createUser({user: "admin",pwd: "password",roles: [ { role: "readWrite", db: "myDb" } ]});
     db.auth('admin','password');
      db.grantRolesToUser("admin",[{ role: "dbAdmin", db: "myDb" }])

为了设置mongodb身份验证,链接示例起作用了。弹簧数据配置为:

<bean class="org.springframework.data.mongodb.core.MongoTemplate"
    id="mongoTemplate">
    <constructor-arg name="mongo" ref="mongo" />
    <constructor-arg name="databaseName" value="myDb" />
             <constructor-arg name="userCredentials" ref="mongoCredentials"/>
</bean>

<bean class="org.springframework.data.mongodb.core.MongoFactoryBean"
    id="mongo">
    <property name="host" value="localhost" />
    <property name="port" value="27017" />
</bean>
 
 <bean id="mongoCredentials" class="org.springframework.data.authentication.UserCredentials">
            <constructor-arg name="username" value="admin" />
            <constructor-arg name="password" value="password"/>
     
</bean>
   

在我的Java代码中:

    public static void main(String[]s)
   {
  ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            
            
dao.TemplateDao dao = (dao.TemplateDao)context.getBean("dao");
dao.testingSales();
 }
     public void testingSales() {
    Date date = Calendar.getInstance().getTime();
             Criteria c= null;
     Aggregation agg = null;
     Aggregation agg2 = null;
          System.out.println(mongoTemplate.getCollectionNames());

 }

它引发此异常:

         org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 13: 'not authorized on myDb to execute command { listCollections: 1, cursor: { batchSize: 0 } }' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "not authorized on myDb to execute command { listCollections: 1, cursor: { batchSize: 0 } }", "code" : 13 }; nested exception is com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on journaldev to execute command { listCollections: 1, cursor: { batchSize: 0 } }' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "not authorized on myDb to execute command { listCollections: 1, cursor: { batchSize: 0 } }", "code" : 13 }
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:107)
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2114)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:448)
at org.springframework.data.mongodb.core.MongoTemplate.getCollectionNames(MongoTemplate.java:1654)
at dao.TemplateDaoImpl.testingSales(TemplateDaoImpl.java:4812)
at dao.impl.TemplateDaoImpl.main(TemplateDaoImpl.java:340)
     
   Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on myDb to execute command { listCollections: 1, cursor: { batchSize: 0 } }' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "not authorized on myDb  to execute command { listCollections: 1, cursor: { batchSize: 0 } }", "code" : 13 }
at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:86)
at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:119)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)
at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:173)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:215)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:206)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:112)
at com.mongodb.operation.ListCollectionsOperation$1.call(ListCollectionsOperation.java:177)
at com.mongodb.operation.ListCollectionsOperation$1.call(ListCollectionsOperation.java:172)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:239)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:212)
at com.mongodb.operation.ListCollectionsOperation.execute(ListCollectionsOperation.java:172)
at com.mongodb.operation.ListCollectionsOperation.execute(ListCollectionsOperation.java:80)
at com.mongodb.Mongo.execute(Mongo.java:773)
at com.mongodb.Mongo$2.execute(Mongo.java:760)
at com.mongodb.OperationIterable.iterator(OperationIterable.java:47)
at com.mongodb.OperationIterable.forEach(OperationIterable.java:70)
at com.mongodb.MappingIterable.forEach(MappingIterable.java:50)
at com.mongodb.MappingIterable.into(MappingIterable.java:60)
at com.mongodb.DB.getCollectionNames(DB.java:253)
at org.springframework.data.mongodb.core.MongoTemplate$14.doInDB(MongoTemplate.java:1656)
at org.springframework.data.mongodb.core.MongoTemplate$14.doInDB(MongoTemplate.java:1654)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:446)
... 3 more

问候

克里斯

观念探索

请使用以下应用程序上下文并尝试连接到MongoDB。它应该工作。您的应用程序上下文中缺少的主要内容是“ AuthenticationMechanism”(即值为SCRAM-SHA-1)。仅添加正确的身份验证机制,我们可能需要采用这种方法。

我已重现了该问题,并使用以下上下文文件解决了该问题。希望这可以解决问题。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/data/mongo
        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">

    <context:annotation-config />

    <bean id="mongoSeedListID" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <ref bean="mongoSeedlID" />
            </list>
        </constructor-arg>
    </bean>

    <bean id="mongoSeedlID" class="com.mongodb.ServerAddress">
        <constructor-arg type="java.lang.String" name="host"
            value="localhost" />
        <constructor-arg type="int" name="port" value="27017" />
    </bean>

    <bean id="mongoCredentialListID" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <ref bean="mongoCredentialID" />
            </list>
        </constructor-arg>
    </bean>

    <bean id="mongoCredentialID" class="com.mongodb.MongoCredential">
        <constructor-arg name="mechanism"
            value="#{T(com.mongodb.AuthenticationMechanism).SCRAM_SHA_1}" />
        <constructor-arg type="java.lang.String" name="userName"
            value="admin" />
        <constructor-arg type="java.lang.String" name="source"
            value="myDb" />
        <constructor-arg type="char[]" name="password" value="password" />
    </bean>

    <bean id="mongoClientID" class="com.mongodb.MongoClient">
        <constructor-arg ref="mongoSeedListID" />
        <constructor-arg ref="mongoCredentialID" />
    </bean>

    <bean id="simpleMongoDbFactoryID"
        class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
        <constructor-arg ref="mongoClientID" />
        <constructor-arg name="databaseName" value="myDb" />
    </bean>

    <bean class="org.springframework.data.mongodb.core.MongoFactoryBean"
        id="mongo">
        <property name="host" value="localhost" />
        <property name="port" value="27017" />
    </bean>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="simpleMongoDbFactoryID" />
    </bean>

</beans>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring MongoDB Replicaset身份验证错误

使用Spring Security + Spring数据+ MongoDB进行身份验证

SortBy Spring Data MongoDb

在JAVA Spring Framework中使用存储库时如何使用MongoDB正确进行身份验证

使用Spring-Data配置MongoDb时发生异常

Spring ControllerAdvice和身份验证/授权异常处理

使用@ExceptionHandler处理Spring Security身份验证异常

Spring Data MongoDB Nosql注入

Spring Data MongoDB嵌入查询

Spring Data MongoDB集合聚合

Spring Data MongoDB搜索日期

Spring Data MongoDB:查询月份

将数据库身份验证添加到Spring Data Rest应用程序

Spring Boot Data JPA @CreatedBy和@UpdatedBy未使用OIDC身份验证进行填充

Spring Data MongoDB无法关闭MongoDB连接

从 Spring Boot 应用程序连接到在本地 docker cointainer 中运行的 MongoDB 的身份验证失败

Spring WebFlux:Spring Data MongoDB反应性存储库中的null值是否引发异常?

Spring安全上下文手动身份验证给出奇怪的结果

更改数据库设计以改进Spring Data JPA软删除和查询身份验证

如何记录Spring Data MongoDB执行的查询?

在Spring Data MongoDB存储库中计数

Spring Data MongoDB失败,出现“ in”查询

使用Spring Data MongoDB指定分片集合

Spring Data MongoDB:如何实现“实体关系”?

Spring Data MongoDB文档到期时间

在Spring Data MongoDB中排除嵌套字段

Spring Data MongoDB是否支持枚举?

使用spring-data-mongodb进行审计

Spring Data MongoDB聚合-获取结果数量