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.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>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM