SpringMVC Mongodb 配置中加入使用者認證資訊

來源:互聯網
上載者:User
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的,有問題的話,可以發送郵件到 oiiopro@live.cn 注意事項 我擷取db的方式是通過template做的

mongoTemplate.getDb();
如果你不是通過mongoTemplate.getDb()的方式擷取資料庫連接的,需要具體分析 如果你不是通過mongoTemplate.getDb()的方式擷取資料庫連接的,需要具體分析 如果你不是通過mongoTemplate.getDb()的方式擷取資料庫連接的,需要具體分析
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.