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()的方式擷取資料庫連接的,需要具體分析