Java Web开发:Spring MVC连接 MongoDB启动用户名密码

预先准备

配置版本

spring MVC 4.1.1

spring-data-mongodb 1.60

mongodb3.2.1

springMVC开发环境已经配好

mongodb添加用户

注意事项:mongodb3.0版本后密码加密有两种方式,MONGODB-CR两种方式,3.0版本之后默认为SCRAM-SHA-1,而spring mongodb默认是MONGODB-CR,此版本并不支持设置加密方式,导致常常出现如下问题:

org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database [xxxx], username = [xxxxx], password = [x******x]
	org.springframework.data.mongodb.core.ReflectiveDbInvoker.authenticate(ReflectiveDbInvoker.java:83)
	org.springframework.data.mongodb.core.MongoDbUtils.doGetDB(MongoDbUtils.java:127)
	org.springframework.data.mongodb.core.MongoDbUtils.getDB(MongoDbUtils.java:94)
	org.springframework.data.mongodb.core.SimpleMongoDbFactory.getDb(SimpleMongoDbFactory.java:203)
	org.springframework.data.mongodb.core.SimpleMongoDbFactory.getDb(SimpleMongoDbFactory.java:191)
	org.springframework.data.mongodb.core.MongoTemplate.getDb(MongoTemplate.java:1606)
	org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1839)
	org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1656)
	org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:564)
	org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:559)
	com.oneday.ashop.core.base.mongo.BaseMongoDaoSupport.findOne(BaseMongoDaoSupport.java:81)
	com.oneday.ashop.webgate.user.UserDao.findUser(UserDao.java:44)
	com.oneday.ashop.webgate.user.UserService.login(UserService.java:88)
	com.oneday.ashop.webgate.user.UserControl.login(UserControl.java:57)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)

我们把mongodb的用户密码加密方式改为MONGODB-CR问题就解决了。

1.查看加密方式

db.system.version.findOne({"_id" : "authSchema"})

5:SCRAM-SHA-1

3:MONGODB-CR

2.如果当前的monggodb已经有了用户,要先删除掉所有用户:

mongo
use admin
db.system.users.remove({})    <== removing all users
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })
3.重新添加用户:
>mongo
>use admin
>db.createUser({user:'admin',pwd:'123456', roles:[{role:'userAdminAnyDatabase', db:'admin'}]})
//用户角色可以百度


4.新建项目数据库-projectDB

注意事项:当我们新建projectDB后,一般会认为admin用户的权限是__system,该用户会拥有projectDB的一切权限,事实是也是如此,但是当在spring中用该admin进行登陆时,是没有权限的,关于这一点我目前还没有深究,也就是说必须为projectDB新建一个用户赋予dbadmin角色。

>use projectDB
>db.createUser({user:'projectUser',pwd:'123456', roles:[{role:'dbAdmin', db:'projectDB'}]})

spring 配置MongoDB连接

config.properties文件

mongo.locate=localhost:27017
mongo.dbname=projectDB
mongo.connectionsPerHost=4  
mongo.threadsAllowedToBlockForConnectionMultiplier=20  
mongo.connectTimeout=0  
mongo.maxWaitTime=10000  
mongo.autoConnectRetry=true  
mongo.socketKeepAlive=true  
mongo.socketTimeout=0  
mongo.username=projectUser
mongo.password=123456


applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context-4.1.xsd
		http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
		http://www.springframework.org/schema/data/mongo
        http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd">
          
          
        <!-- 加载属性配置文件 里面配置了mongodb的属性 -->   
	 <context:property-placeholder location="classpath:config.properties"/> 
          
        <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->  
        <mongo:mongo id="mongo" replica-set="${mongo.locate}">  
            <!-- 一些连接属性的设置 -->      
            <mongo:options
                 connections-per-host="${mongo.connectionsPerHost}"  
                 threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"  
                 connect-timeout="${mongo.connectTimeout}" 
                 max-wait-time="${mongo.maxWaitTime}"  
                 auto-connect-retry="${mongo.autoConnectRetry}"  
                 socket-keep-alive="${mongo.socketKeepAlive}" 
                 socket-timeout="${mongo.socketTimeout}" 
                 write-number="1"  
                 write-timeout="0"  
                 write-fsync="true"/>  
        </mongo:mongo>  
                      
        <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->  
        <mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongo"/>
        <!--设置用户验证-->  

        <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
		  <constructor-arg   name="username" value="${mongo.username}" /> 
		  <constructor-arg   name="password" value="${mongo.password}" /> 
	   </bean>
        <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->  
        <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
          <constructor-arg name="mongo" ref="mongo"/>  
          <constructor-arg name="databaseName" value="${mongo.dbname}" />
        	<constructor-arg name="userCredentials" ref="userCredentials" />
        </bean>  
    </beans>  

这样就连接成功了。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhulangfly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值