Spring Data MongoDB连接Docker部署MongoDB报13未授权错误
问题原因
你的配置存在3个核心问题,直接触发了错误码13的未授权报错:
- 行内
credential属性解析兼容问题:当前spring-data-mongodb 3.4.0搭配mongodb-driver 4.6.0的版本组合下,直接在<mongo:mongo-client>标签上写credential="user:pwd@dbname"会出现字符串分割错误。从报错信息on server dbname:27017可以确认,框架误将@后的业务库名识别成了Mongo服务的主机地址,既没连对你配置的hname主机,也没正确加载认证信息。 - 认证数据库配置不匹配:你其他Spring Boot应用能正常连接,说明账号密码本身有效,但行内配置的
user:pwd@dbname默认将业务库作为认证源。绝大多数MongoDB部署的账号都是创建在admin认证库下,你需要和正常运行的Boot应用的spring.data.mongodb.authentication-database配置对齐,指定正确的认证库。 - 冗余配置引发的不一致风险:你原本定义了
mongoDbFactory但没有使用,手动给MongoTemplate传MongoClient和库名的写法,容易出现认证上下文、库名传递不一致的问题。
修复方案
替换原有MongoDB相关XML配置为以下内容,注意将认证库参数和你正常运行的Spring Boot应用配置保持一致:
<mongo:mongo-client id="mongoClient" host="hname" port="27017"> <!-- 显式配置认证信息,authentication-database替换为你Boot应用中实际使用的认证库,通常为admin --> <mongo:credential username="user" password="pwd" authentication-database="admin"/> </mongo:mongo-client> <mongo:db-factory id="mongoDbFactory" dbname="dbname" mongo-client-ref="mongoClient" /> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongoDbFactory"/> </bean> <mongo:repositories base-package="xxx.yyy.zzz.core.repository" mongo-template-ref="mongoTemplate" />
配置说明:
- 放弃行内credential属性写法,改用子标签
<mongo:credential>显式指定用户名、密码、认证库,避免特殊字符、版本兼容导致的解析错误。如果你的MongoDB账号确实创建在业务库dbname下,将authentication-database的值改为dbname即可,和你正常运行的Spring Boot应用配置保持一致就不会出错。 - MongoTemplate直接注入已配置好的
mongoDbFactory实例,不需要单独传MongoClient和库名,保证认证、连接、库名配置完全一致。
内容的提问来源于stack exchange,提问作者pbale
相关产品推荐
相关产品推荐

