zoukankan      html  css  js  c++  java
  • 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;
    	}

    以上,大致流程就这样。。
    大家如果有问题或者更好的方法,欢迎交流。

  • 相关阅读:
    LightOJ 1139 8 puzzle + hdu 1043 Eight A*
    hdu 1180 优先队列 + bfs
    hdu 1270
    HDU Doing Homework
    hdu 1171 Big Event in HDU
    hdu 3613 (KMP)回文串
    POJ 3461 Oulipo(KMP)
    POJ 1565(DP状态压缩)
    NYOJ 634 万里挑一(优先队列)
    职场手记1_你想成文什么样的人
  • 原文地址:https://www.cnblogs.com/jessonlv/p/4387997.html
Copyright © 2011-2022 走看看