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();