MongoDB系列:四、spring整合mongodb,带用户验证

 

   在前面的两篇博客 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.mongodbgroupId>
    <artifactId>mongo-java-driverartifactId>
    <version>3.8.2version>
dependency>
<dependency>
    <groupId>org.springframework.datagroupId>
    <artifactId>spring-data-mongodbartifactId>
    <version>1.10.7.RELEASEversion>
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">


    
    <bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath*:config.propertiesvalue>
            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"/>

    
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory"/>
    bean>

beans>

 

 

转载于:https://www.cnblogs.com/DDgougou/p/10314412.html

你可能感兴趣的:(MongoDB系列:四、spring整合mongodb,带用户验证)