Camel连接MongoDB带认证功能失效问题求助
从你的描述和配置来看,核心问题是Camel的MongoDB组件没有正确完成认证流程——虽然你在MongoURI里配置了用户名密码,但要么是配置格式有误,要么是组件和驱动的适配出了问题。下面一步步帮你排查修复:
1. 修正Spring属性占位符语法
你配置的MongoURI里用了$mongodb{user}这种格式,这不是Spring标准的属性占位符写法。Spring的属性占位符应该是${mongodb.user}(单个$+大括号,变量名用点分隔)。如果是读取外部配置文件里的属性,修正后的配置如下:
<bean id="myDB" class="com.mongodb.Mongo"> <constructor-arg index="0"> <bean class="com.mongodb.MongoURI"> <constructor-arg index="0" value="mongodb://${mongodb.user}:${mongodb.passwd}@${mongodb.host}:${mongodb.port}/${mongodb.db}"/> </bean> </constructor-arg> </bean>
如果是硬编码测试,直接写实际值即可:
<constructor-arg index="0" value="mongodb://admin:123456@localhost:27017/customerdb"/>
2. 确保数据库配置前后一致
你的Camel端点指定了database=customerdb,而MongoURI里也通过路径指定了数据库。要注意:MongoDB的用户是和特定数据库绑定的,如果URI里的数据库和Camel端点的database不一致,认证必然失败。
建议两者保持统一——比如你的用户是在customerdb下创建的,那么URI路径和Camel端点的database都设为customerdb。
3. 升级MongoDB驱动与Camel组件(推荐)
你使用的com.mongodb.Mongo类已经被官方标记为过时,推荐使用MongoClient替代,同时确保Camel MongoDB组件版本和MongoDB驱动版本兼容。更新后的配置示例:
<bean id="myDB" class="com.mongodb.MongoClient"> <constructor-arg index="0"> <bean class="com.mongodb.MongoClientURI"> <constructor-arg index="0" value="mongodb://${mongodb.user}:${mongodb.passwd}@${mongodb.host}:${mongodb.port}/${mongodb.db}"/> </bean> </constructor-arg> </bean>
这里用MongoClient和MongoClientURI替代了旧的Mongo和MongoURI,能更好地支持新版MongoDB的认证逻辑。
4. 验证用户权限(排除权限问题)
虽然你说命令行可以操作,但要确认:命令行使用的用户和Camel配置的用户是同一个,且该用户拥有customerdb.customer集合的insert权限。可以通过MongoDB Shell执行以下命令检查:
use customerdb // 查看用户信息及权限 db.getUser("你的用户名")
5. 用简化配置测试(排除URI解析问题)
如果上述调整后还是失败,可以尝试直接构造认证凭证,避免URI解析的潜在问题:
<bean id="myDB" class="com.mongodb.MongoClient"> <constructor-arg index="0" value="localhost"/> <constructor-arg index="1" value="27017"/> <constructor-arg index="2"> <list> <bean class="com.mongodb.MongoCredential"> <constructor-arg index="0" value="你的用户名"/> <constructor-arg index="1" value="customerdb"/> <constructor-arg index="2" value="你的密码"/> </bean> </list> </constructor-arg> </bean>
这种方式直接传入主机、端口和认证凭证,能快速定位是否是URI格式的问题。
按照上面的步骤调整后,应该能解决认证失败的问题。如果还是不行,可以开启MongoDB的--verbose日志和Camel的DEBUG日志,查看更详细的认证过程信息。
内容的提问来源于stack exchange,提问作者Godisgreat

