MongoDB:mongodb在項目開發時的安全驗證、分頁查詢操作

MongoDB:mongodb在項目開發時的安全驗證、分頁查詢操作。

對於數據庫而言,在項目應用中都需要安全驗證,不然,就會報錯,呵呵~~

現在貼出來我在項目中是怎麼做的。

原創文章,轉載請註明出處:http://blog.csdn.net/jessonlv/article/details/18656333

數據源bean:

package com.ishowchina.user.dao;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class DataSource {
	private String ip;//數據庫連接信息要從配置文件中獲取  參考appconfig.properties文件
	private Integer port;
	protected String dbName;
	protected Boolean auth;
	protected String userName;
	protected String passWord;
	//打開連接 此處在獲取數據庫信息(ip、賬戶、密碼等)後,打開數據庫。
	public MongoClient OpenConnection() throws Exception{
		MongoClient mongoClient = new MongoClient( ip,port);
		return mongoClient;
	}
	//獲取數據集  此處爲數據庫安全驗證
	public DBCollection getCollection(MongoClient client,String tableName){
		if(client==null){
			return null;
		}else {
			DB db = client.getDB(getDbName());//獲取數據庫
			boolean r=true;//驗證用戶及密碼
			if(auth!=null && auth.equals(true)){
				r = db.authenticate(userName, passWord.toCharArray());//密碼驗證
			}
			if(r){
				DBCollection coll = db.getCollection(tableName);//獲取數據集
				return coll;
			}else {
				return null;
			}
		}
	}
	//釋放連接
	public void ReleaseConnection(MongoClient mongoClient){
		if(mongoClient!=null){
			mongoClient.close();
		}
	}
	//刪除操作,注意要傳入參數
	public void deleteObject(DBObject o,DBCollection col){
		col.remove(o);
	}
	//分頁查詢   分頁查詢mongodb已經爲我們集成了,只需調用api就行
	public DBCursor queryPage(DBObject query,DBObject sort,int start,int limit,DBCollection col){
		//.sort('account',1).limit(10),int count = cursor.count()
		BasicDBObject exp=new BasicDBObject("_id",0);
		return col.find(query,exp).sort(sort).skip(start).limit(limit);
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public Integer getPort() {
		return port;
	}
	public void setPort(Integer port) {
		this.port = port;
	}
	public String getDbName() {
		return dbName;
	}
	public Boolean getAuth() {
		return auth;
	}
	public void setAuth(Boolean auth) {
		this.auth = auth;
	}
	public void setDbName(String dbName) {
		this.dbName = dbName;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
}

appconfig.properties配置文件的內容,配置數據庫源信息

mongo.ip=160.0.0.243
mongo.port=27017
mongo.auth=true
mongo.user=ucenter
mongo.pwd=user2show
mongo.dbName=ucenter

此外,肯定還要把配置文件appconfig.properties導入到spring bean factory,也就是需要讓datasource.java 知道去appconfig.properties 中找數據庫配置信息

spring-servlet.xml

    <!-- 導入配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="locations">  
            <list>  
                <value>classpath:appconfig.properties</value>
            </list>  
        </property>  
    </bean>

這樣做還不夠,雖然知道了去那找數據庫配置信息,但是,怎麼獲取數據庫配置信息呢,還是在spring-servlet.xml裏。


    <!-- 數據源 -->
    <bean id="dataSource" class="com.ishowchina.user.dao.DataSource"><!-- 此處是和我們的數據庫bean是對應關係 -->
    	<property name="ip" value="${mongo.ip}"/> <!-- 此處是去appconfig.properties裏找關鍵字對應的數據庫信息 -->
    	<property name="port" value="${mongo.port}"/> 
    	<property name="dbName" value="${mongo.dbName}"/> 
    	<property name="auth" value="${mongo.auth}"/>
    	<property name="userName" value="${mongo.user}"/> 
    	<property name="passWord" value="${mongo.pwd}"/> 
    </bean>

以上就是完全的相關配置,接下來我們就可以調用getCollection、OpenConnection等方法了
舉個例子:

public DBObject getUserInfo(DBObject o) throws Exception{
		
		MongoClient mongoClient = dataSource.OpenConnection();
		DBCollection coll = dataSource.getCollection(mongoClient,tableName);//獲取數據集userinfo
		//mongoClient.setWriteConcern(WriteConcern.JOURNALED);//Setting Write Concern
		BasicDBObject exp=new BasicDBObject("_id",0);//排除ID字段
		DBObject myDoc = coll.findOne(o,exp);
		
		dataSource.ReleaseConnection(mongoClient) ;//釋放連接
		return myDoc;
	}

以上,大致流程就這樣。。
大家如果有問題或者更好的方法,歡迎交流。

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