SpringMVC Mongodb 配置中加入用戶認證信息

Spring Mongodb 配置中加入用戶認證信息


Spring mongodb的項目搭建請參考:http://blog.csdn.net/h348592532/article/details/39344823

在鏈接的文章裏邊詳細介紹瞭如用搭建一套 springmvc+mongodb+maven
但是裏邊沒有包括mongodb的用戶信息配置,而我們實際需求的是帶用戶認證配置的,做一些調試,配置好了,其實很簡單,下面進入正題。

主要內容 

已有的配置裏邊,mongodb的配置如下:

    <mongo:mongo id="mongo" replica-set="${mongo.hostport}"> 
        <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:db-factory dbname="database" mongo-ref="mongo" />  

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
        <constructor-arg ref="mongo" />  
        <constructor-arg name="databaseName" value="db_mongo" />  
    </bean> 

剛開始試圖在mongo實例上加入用戶名密碼,發現mongo根本就不支持,沒有這倆屬性。

查閱相關資料會發現,java去處理mongodb連接的時候,用戶信息認證是放在db塊上邊:

    db.authenticate("sa", "sa".toCharArray());

所以,只要找到db怎麼獲取,就能找到配置用戶名密碼的方式了,此處,db的獲取方式是:

    mongoTemplate.getDb();

到這兒, 知道了db的獲取方式了,通過mongoTemplate來獲取的。回過頭在看一眼配置文件,發現mongoTemplate配置了一個帶兩個參數的構造函數mongo、databaseName,該構造函數如下:

    public MongoTemplate(Mongo mongo, String databaseName) {
        this(new SimpleMongoDbFactory(mongo, databaseName), null);
    }

這會兒好了,絕對存在那麼個帶用戶信息的構造函數,找到了之後呢,在配置裏邊配置一下子就ok了,於是找到這麼一個:

    public MongoTemplate(Mongo mongo, String databaseName, UserCredentials userCredentials) {
        this(new SimpleMongoDbFactory(mongo, databaseName, userCredentials));
    }

這就有用戶信息了UserCredentials ,再來看看這個類,發現它就帶一個含用戶名、密碼的構造函數:

    public UserCredentials(String username, String password) {
        this.username = StringUtils.hasText(username) ? username : null;
        this.password = StringUtils.hasText(password) ? password : null;
    }

好了,下面只需要在Spring配置裏邊聲明一個UserCredentials類的bean,完了之後呢,把兩個參數帶上就ok了:

首先聲明一個用戶信息bean

    <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
        <constructor-arg name="username" value="${mongo.uname}" />
        <constructor-arg name="password" value="${mongo.upass}" />
    </bean>

修改mongoTemplate的配置,多加入一個構造函數參數

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongo" />
        <constructor-arg name="databaseName" value="${mongo.dbName}" />
        <constructor-arg ref="userCredentials" />
    </bean>

以上,配置就完成了。

在我自己本地測試是ok的,有問題的話,可以發送郵件到 [email protected]

注意事項

我獲取db的方式是通過template做的

mongoTemplate.getDb();

如果你不是通過mongoTemplate.getDb()的方式獲取數據庫連接的,需要具體分析

如果你不是通過mongoTemplate.getDb()的方式獲取數據庫連接的,需要具體分析

如果你不是通過mongoTemplate.getDb()的方式獲取數據庫連接的,需要具體分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章