在前面的两篇博客 MongoDB常用操作练习springboot整合mongoDB的简单demo中,我们基本上熟悉了mongodb,也把它与spring boot进行了整合并且简单使用。在本篇博客中,将在spring项目中整合mongo,而且是带用户验证,网上大部分spring整合mongodb的例程,都是不带用户验证的,说白了就是没有密码,只要别人知道你的ip+port,那你的数据大白于天下。这不最近的新闻:MongoDB 裸奔,2 亿国人求职简历泄漏!。数据库泄露多可怕。所以只要是个数据库,用户验证是必须的。但是我想不通的是mongodb这么流行的数据库,竟然在安装时不是默认设置用户名和密码的。带着这个疑问进行整合吧。下面是整合过程(本文的mongo驱动mongo-java-driver是3.8.2,只要你的驱动是3.0.0版本以上就行)。

一、mongodb设置密码

  MongoDB中每个数据库之间是相互独立的,都有独立的权限,mongodb默认没有开启验证功能,以下为配置步骤(这个是linux的mongodb,windows的mongodb配置与其类似):

   1) 在开启验证之前,需创建一个管理员用户
       $mongo
       $db.createUser({user:"root",pwd: "root",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
       创建一个管理员用户root,密码root,管理员用户拥有userAdminAnyDatabase角色
   2) 开启mongodb验证功能
       进入mongodb配置文件进行修改,个人的地址为/etc/mongod.conf
       $sudo vim /etc/mongod.conf
       去掉"#auth = true"此行开头的#号,保存后退出
   3) 重启mongodb服务
       $sudo service mongod restart
   4) 用创建的管理员用户登录
       $mongo -u root -p root --authenticationDatabase admin
   5) 增加需要用spring进行登录的数据库的用户名、密码和权限
       $db.createUser({user:"abc", pwd:"abc2019", roles:[{role:"dbOwner", db:"test"}]})
       远程登录mongodb test数据库的用户名为abc,密码为abc2019,分配的权限为dbOwer。至此mongodb本地的认证配置完成。
   

二、pom.xml

  这里我采用的驱动mongo-java-driver是3.8.2,如果你采用的驱动版本是3.*.*,那么整个整合过程与我讲述的一致;如果是3.*.*版本以下的,那么和本文的配置是不一致的,最主要的体现在mongo-spring.xml中。

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.7.RELEASE</version>
</dependency>

三、config.properties

# 开发
mongo.host = 127.0.0.1
mongo.port = 27017
mongo.userName = abc
mongo.password = abc2019
mongo.dbname = test

四、mongo-spring.xml

   mongo:mongo-client标签中的 credentials="${mongo.userName}:${mongo.password}@${mongo.dbname}"就是mongo数据库的用户验证。格式为:用户名:密码@默认数据库。如果你的mongo数据库没有认证,就可以去掉这句话,不过建议给数据库加认证,这是安全着想。另外加上用户验证后,我们会发现整个配置中有两处用到了mongo.dbname,对于这一点我现在都没想清楚。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> <!-- 加载Properties文件 -->
<bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:config.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean> <mongo:mongo-client id="mongo" host="${mongo.host}" port="${mongo.port}"
credentials="${mongo.userName}:${mongo.password}@${mongo.dbname}">
<mongo:client-options
connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000"
max-wait-time="1500"
socket-keep-alive="true"
socket-timeout="1500"/>
</mongo:mongo-client> <!-- 设置使用的数据库名-->
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.dbname}" mongo-ref="mongo"/> <!-- mongodb的模板 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoDbFactory"/>
</bean> </beans>

MongoDB系列:四、spring整合mongodb,带用户验证的更多相关文章

  1. spring整合mongodb

    使用spring整合mongodb maven 依赖 <dependency> <groupId>org.mongodb</groupId> <artifac ...

  2. MongoDB安装与Spring整合

    MongoDB是面向文档的非关系型数据库,数据模型是一种类似于JSON的结构,在数据库中存的是各种各样的JSON.官网下载地址:https://www.mongodb.com/download-cen ...

  3. Spring整合MongoDB(转)

    1.认识Spring Data MongoDB 之前还的确不知道Spring连集成Nosql的东西都实现了,还以为自己又要手动封装一个操作MongoDB的API呢,结果就发现了Spring Data ...

  4. Java WebService 教程系列之 Spring 整合 CXF

    Java WebService 教程系列之 Spring 整合 CXF 一.引入 jar 包 <dependency> <groupId>org.apache.cxf</ ...

  5. 像我这样优雅地进行Spring整合MongoDB

    本文重点是要将mongodb与spring整合到项目中去,在实践中发现问题,追踪问题,然后解决问题. 一.准备 Maven.Spring(spring-data-mongodb) spring Dat ...

  6. MongoDB系列四(索引).

    一.索引简介 再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似.有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,这能使查找速度提高 ...

  7. MongoDB系列:二、MongoDB常用操作练习

    最近在自学MongoDB,在此记录一下,当做学习笔记了(不断更新中)!! 一.背景 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存 ...

  8. Java开发学习(十四)----Spring整合Mybatis及Junit

    一.Spring整合Mybatis思路分析 1.1 环境准备 步骤1:准备数据库表 Mybatis是来操作数据库表,所以先创建一个数据库及表 create database spring_db cha ...

  9. 【SSH框架】系列之 Spring 整合 Hibernate 框架

    1.SSH 三大框架整合原理 Spring 与 Struts2 的整合就是将 Action 对象交给 Spring 容器来负责创建. Spring 与 Hibernate 的整合就是将 Session ...

随机推荐

  1. 在Coding上搭建Hexo个人博客

    先注册一个Coding账号,然后创建一个项目这个项目的名字应该是{username}.coding.me 安装hexo脚手架 $ npm install -g hexo-cli 建站 安装完 Hexo ...

  2. C# 《编写高质量代码改善建议》整理&笔记 --(五)类型设计

    1.区分接口和抽象类的应用场合 区别: ①接口支持多继承,抽象类则不能. ②接口可以包含方法,属性,索引器,事件的签名,但不能有实现,抽象类则可以. ③接口在增加新方法后,所有的继承者都必须重构,否则 ...

  3. java~gradle构建公用包并上传到仓库

    java~gradle构建公用包并上传到仓库 我们一般会把公用的代码放在一个包里,然后其它 项目可以直接使用,就像你使用第三方包一样! 仓库 存储包的地方叫做仓库,一般可以分为本地仓库和远程仓库,本地 ...

  4. 微信公众号开发C#系列-1、微信公众平台注册

    微信公众号简介 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发主要指的是公众号的账号类型,公众号的账号类型分为订阅号.服务号.企 ...

  5. python的小技巧 让你的代码更美观

    持续更新.. 1,活用lambda表达式 匿名函数 lambda 可以提供很多便利.下面是举例. dic = {1:lambda a,b : a+b} 2,代码一行化. 当逻辑语句后只有一行代码的时候 ...

  6. Centos7 Jenkins日志过大

    df 查看 占用 [root@instance-ncwnnt0e /]# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs ...

  7. docker daemon 配置文件

    Ubuntu Ubuntu 14.04 配置文件位于 /etc/init/docker.conf Ubuntu 15.04 配置文件位于 /etc/default/docker,修改配置项DOCKER ...

  8. Java学习点滴——初识Java

    基于<Java编程思想>第四版 前言 "程序就是算法加数据结构",而算法就是控制语句加操作符,编写一个程序就是使用控制语句加操作符去操作数据结构,因此我从Java的控制 ...

  9. HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别

    集合类 key value super 说明 HashTable 不能为null 不能为null Dictionary 线程安全 ConcurrentHashMap 不能为null 不能为null A ...

  10. arcgis api 3.x for js 之 echarts 开源 js 库实现地图统计图分析(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...