spring mvc 添加 mongodb 4.x用户权限验证 (mongo 设置用户名密码)


来自: https://www.shixinwl.com/article/129

一、设置用户名密码的初衷

在默认情况下,mongod是监听在0.0.0.0之上的,任何客户端都可以直接连接27017,且没有认证。这样做的好处是,用户可以即时上手,不用担心被一堆配置弄的心烦意乱。然而坏处也是显而易见,如果直接在公网服务器上如此搭建MongoDB,那么所有人都可以直接访问并修改数据库数据了。
默认情况下,mongod也是没有管理员账户的。因此除非你在admin数据库中使用db.addUser()命令添加了管理员帐号,且使用–auth参数启动mongod,否则在数据库中任何人都可以无需认证执行所有命令。包括delete和shutdown。
此外,mongod还会默认监听28017端口,同样是绑定所有ip。这是一个mongod自带的web监控界面。从中可以获取到数据库当前连接、log、状态、运行系统等信息。如果你开启了–rest参数,甚至可以直接通过web界面查询数据,执行mongod命令。

一、使用MongoTemplate 配置用户验证

1.创建mongo.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.0.xsd
						   http://www.springframework.org/schema/data/mongo
						   http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
						   http://www.springframework.org/schema/beans
						   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

	<!-- 加载mongodb的属性配置文件 -->
	<!--<context:property-placeholder location="classpath:mongo.properties" />-->
	<!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
	<mongo:mongo id="mongo" replica-set="${mongo.hostPort}">
	<!-- 一些连接属性的设置 -->
		<!--
         connections-per-host: 每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住
         max-wait-time: 被阻塞线程从连接池获取连接的最长等待时间(ms)
         connect-timeout:在建立(打开)套接字连接时的超时时间(ms)
         socket-timeout:套接字超时时间;该值会被传递给Socket.setSoTimeout(int)
         slave-ok:指明是否答应驱动从次要节点或者奴隶节点读取数据
         -->
		<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}"
			slave-ok="${mongo.slaveOk}" write-number="1"
			write-timeout="0" write-fsync="true"/>
	</mongo:mongo>

	<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
	<mongo:db-factory dbname="${mongo.dataName}" 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>
	
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg ref="mongo" />
		<constructor-arg name="databaseName" value="${mongo.dataName}" />
		<!--添加安全验证构造函数参数-->
		<constructor-arg ref="userCredentials" />
	</bean>
</beans>

2.创建mongo.properties:

mongo.hostPort=127.0.0.1:27017
mongo.username=dataUser #spring 需要操作的数据库用户名
mongo.password=cdb123456 #spring 需要操作的数据库用户密码
mongo.dataName=nrvsp  # spring 需要操作的数据库

#mongodb参数
mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
mongo.slaveOk=true

二、配置mongodb数据库

一、创建管理员权限

1.打开cmd,输入mongo,进入mongodb的命令页面在这里插入图片描述

> use admin #进入admin数据库
switched to db admin
> db.createUser({user:"admin",pwd:"admin",roles:[{role:"root", db:"admin"}]}> Successfully added user: {
        "user" : "root",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

2.通过刚才创建的超级管理员账号登陆然后创建需要用spring 操作数据的的数据库账号
在这里插入图片描述

> use admin
switched to db admin
> db.auth("root","cdb123456")
1
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
nrvsp   0.011GB
> use nrvsp
switched to db nrvsp
> db.createUser( {user:"dataUser", pwd:"cdb123456",roles:[{role:"dbOwner",db:"nrvsp"}]})
Successfully added user: {
        "user" : "dataUser",
        "roles" : [
                {
                        "role" : "dbOwner",
                        "db" : "nrvsp"
                }
        ]
}
>

注意:这里的子账号就是 mongodb 配置文件里面所需要填写的账号信息

二、修改配置文档mongod.cfg(位置:安装目录\bin 下)

首先,将bind_ip改为0.0.0.0(让其他电脑可以访问,用于远程连接,如果bind_ip127.0.0.1的话,就只能本地访问)

security:
  authorization: enabled #注意缩进,参照其他的值来改,若是缩进不对可能导致后面服务不能重启

如图:
在这里插入图片描述

三、重启服务

重启MongoDB Server服务,启用认证!
现在就可以用Java 程序查询nrvsp 这个数据库了

参考文章:
https://blog.csdn.net/qq_26896281/article/details/81206492
https://blog.csdn.net/boybruce/article/details/45821829
中途踩坑参考 :
https://blog.csdn.net/wangmao01/article/details/80805643

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值