You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:36:18