SringData+MongoDB鉴权失败

发表于  菜鸟之路   2016-07-23   字数:2627   阅读量: 446    字号:   赞: 1    

SringData+MongoDB鉴权失败

最近升级了MongoDB的版本到新版后,springData总是连不上MongoDB,提示错误信息如下:
但是我利用Robomongo客户端是可以连上的,证明我的用户名和密码没错。

“error”: “Internal Server Error”,
“exception”: “org.springframework.data.mongodb.CannotGetMongoDbConnectionException”,
“message”: “Failed to authenticate to database [testdb], username = [test_user], password = [t**t]“

经过了一个晚上的折腾和搜索后发现最新的MongoDB版本已经更改了连接方式,现将我的Spring所用的版本和相关的Maven依赖粘贴如下:

MongoDB版本:3.2.6 ; Spring版本:4.1 ; spring-data-mongodb jar包版本1.8

部分Maven依赖如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- mongodb java driver -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.0.2</version>
        </dependency>
 
        <!-- Spring data mongodb -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>

部分Spring配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
        xmlns:context="http://www.springframework.org/schema/context"
 
    <context:component-scan base-package="com.test" />
 
     
       <mongo:mongo-client host="127.0.0.1" port="27017" credentials="user:pass@coderzhw" id="mongo">
     <mongo:client-options write-concern="SAFE"/>
   </mongo:mongo-client>
 
   <mongo:db-factory  id="mongoDbFactory" dbname="coderzhw" mongo-ref="mongo" />
     
     
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
     <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
   </bean>
 
    <!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
    <mongo:mapping-converter base-package="com.test.model" />
 
    <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
    <mongo:repositories base-package="com.test.dao" />
</beans>

MongoDB的连接变成了mongo-client,而且增加了credentials方法来认证。credentials=”user:pass@coderzhw”这一句引号里的表示“用户名:密码@数据库名”!

一般来说鉴权失败有如下几种可能:
1. 帐号密码不对
2. 鉴权的数据库不对(帐号不是在指定的数据库里创建的)
3. 鉴权算法不对,比如2.x 的mongo 和 3.x使用的默认鉴权算法不一样,直接用2.x的driver访问3.x的mongodb是无法auth的。


已有 4 条评论
  1. 成都周润发

    最坑的是near查询有问题,底层封装的文档格式不对

    2016年11月23日 10:55 回复
  2. 梦白-凝志

    加个微信行吗我微信wx1821309590希望能得到老司机的指点我也是湖北的,准备去武汉读青鸟。

    2016年10月13日 21:28来自移动端 回复
  3. 完全不懂怎么破?

    2016年10月13日 19:46 回复
  4. 看不太懂啊、、、

    2016年9月1日 16:54 回复