当前位置: 首页 > 知识库问答 >
问题:

Spring Data MongoDB XML配置无法对Mongo-database进行身份验证

郭易安
2023-03-14

目前,我在使用MongoDB进行Spring身份验证时遇到了一个问题。我在Spring XML配置文件中有以下声明:

Spring XML文件的Spring Boot导入:我正在我的“Spring Boot主类”中导入下面的“Spring配置XML”文件,如下所示:

@SpringBootApplication
@ImportResource("classpath:META-INF/spring/Myapp-AppContext.xml")
public class MySpringBootApplication extends SpringBootServletInitializer {
.... //Some Code goes here
}
<mongo:mongo-client id="mongo" host="localhost" port="27017" credentials="admin:mypass@mydb">       
    <mongo:client-options description="Connection to DB"/>
</mongo:mongo-client>

<mongo:db-factory id="myConnection" mongo-ref="mongo" dbname="mydb"/>
<mongo:template id="myOps" db-factory-ref="myConnection"/>
<mongo:repositories
    base-package="com.test.app" mongo-template-ref="myOps" />

原因:org.springframework.beans.conversionNotSupportedException:无法将“java.lang.String”类型的属性值转换为属性“credentials”所需的类型“com.MongoDB.MongoCredential[]”;嵌套异常为java.lang.IllegalStateException:无法将“java.lang.String”类型的值转换为属性“Credentials”的必需类型“com.MongoDB.MongoCredential”:在org.springframework.beans.abstractnestablePropertyAccessor.convertifeed(abstractnestablePropertyAccessor.java:590)~[spring-beans-5.0.6.release.jar:5.0.6.release]在es(abstractautoWireCapableBeanFactory.java:1614)~[spring-beans-5.0.6.release.jar:5.0.6.release]在org.springframework.beans.factory.support.abstractautoWireCapableBeanFactory.populateBean(abstractautoWireCapableBeanFactory.java:1361)~[spring-beans-5.0.6.release.jar]在

异常原因:

按照我的理解,我认为“spring-data-mongoDB”JAR缺少一个“converter”实现,该实现将“credentials”属性(它是字符串类型)转换为“com.mongodb.mongoCredential”数组

请让我知道是否有另一个企业版本的“spring-data-mongodb”支持身份验证机制或任何其他解决这个问题的方式都是受欢迎的。

我的应用程序使用以下版本的软件:

    null

共有1个答案

郑声
2023-03-14

我让它以不同的方式工作。最后的Spring XML文件配置如下所示:

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

<bean id="myMongoServer" 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="myMongoCredentials" class="java.util.ArrayList">
<constructor-arg>
    <list>
        <ref bean="myMongoCredential" />
    </list>
</constructor-arg>
</bean>

<bean id="myMongoCredential" 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="mypass"/>
</bean>

<!-- MongoClient -->
<bean id="mongo" class="com.mongodb.MongoClient">
        <constructor-arg ref="myMongoServers" />
        <constructor-arg ref="myMongoCredentials"  />
</bean>

<mongo:db-factory id="myConnection" mongo-ref="mongo" dbname="mydb"/>

<mongo:template id="myOps" db-factory-ref="myConnection"/>

<mongo:repositories base-package="com.test.app" mongo-template-ref="myOps" />
 类似资料:
  • 问题内容: 我需要针对SOCKS代理设置代理身份验证。我发现这篇文章提供了适用于常见HTTP代理的说明。 该功能也可以与 SOCKS 代理一起使用吗?还是我必须做一些不同的事情? 问题答案: Apache HTTPClient 的功能页面显示: 使用本机Java套接字支持通过SOCKS代理(版本4和5)进行透明连接。 对于“透明”,我想他们的意思是它可以工作而无需做任何特殊的事情。您在某处有SOC

  • ii)$jboss_home/bin/kcadm.sh配置凭据--服务器http://localhost:8080/auth--realm master-user uadmin--password${UADMIN_PWD} iii)$jboss_home/bin/kcadm.sh create realms-s realm=myrealm-s enabled=true 最重要的是- 对于领域创建过

  • 在这里尝试看看是否有人已经用Rundeck对AD进行了LDAP身份验证。我正在使用RunDesk的JRE运行方法。以下是我到目前为止所做的工作: 我已经设置了jaas-ldap.conf,如Rundeck authentication users页面所示 我已向管理员请求ssl证书。要使用ldaps,rundeck需要ssl证书,这是在他们的站点上编写的。获得证书后,他们提到以下两个步骤: 一旦获

  • 有人能告诉我如何在docker容器中更改Cassandra.yaml吗?我想在docker中为cassandra访问启用密码身份验证。

  • 问题内容: 我有一个Node.js程序,该程序使用root帐户连接到本地MySQL数据库(这不是生产设置)。这是创建连接的代码: 它可以与MySQL 5.7一起使用,但是由于安装了MySQL 8.0,因此在启动Node.js应用程序时出现此错误: 看来根帐户使用了一种新的密码哈希方法: …但是我不知道为什么Node.js无法连接到它。我已经更新了所有npm软件包,但这仍然是一个问题。 我想保留新的

  • 问题内容: 我正在尝试使用swift来对本地播放器进行身份验证,但是每次我为.authenticated属性获取错误值时,都无法使用。这是我正在使用的代码,应用启动时,主视图控制器会调用它。 它可以很好地显示登录视图,但是当我输入测试帐户登录名时,它只是将as 返回为false。iTunes Connect中的捆绑包标识符和info.plist完全相同,版本和应用程序名称也相同。iTunes Co