All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.frameworkset.security.session.MongoDBUtil Maven / Gradle / Ivy

Go to download

support session share between application cluster nodes and cross domain application nodes.support good application session monitor and session data statitic module.demo site http://session.bbossgroups.com/

There is a newer version: 6.2.9
Show newest version
package org.frameworkset.security.session;

import java.util.*;

import com.mongodb.WriteConcern;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import org.bson.Document;
import org.frameworkset.nosql.mongodb.MongoDB;
import org.frameworkset.nosql.mongodb.MongoDBHelper;
import org.frameworkset.spi.BaseApplicationContext;
import org.frameworkset.spi.DefaultApplicationContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.frameworkset.util.StringUtil;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;

public class MongoDBUtil {
	public static final String defaultMongoDB = "default";

//	 private static MongoDB mongoClient;
	 private static final Object ovalue = new Object();
	 private static final Object sessionlock = new Object();
	 private static boolean configdbindexed;
	 private static boolean initSessionDB;
	private static MongoDatabase configdb = null;
	 private static  Map dbcollectionCache = null;
	 private static MongoDatabase sessiondb = null;
	private static MongoDatabase jonersafesessiondb = null;
	 private static  boolean closeDB;
	private static Logger log = LoggerFactory.getLogger(MongoDBUtil.class);
	private static BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("mongodb.xml");
	public static  void initSessionDB()
	{
		if(initSessionDB)
			return ;
		synchronized(sessionlock)
		{
			if(initSessionDB)
				return ;
			try
			{
				MongoDB mongoClient = MongoDBHelper.getMongoClient(MongoDBHelper.defaultMongoDB);
				dbcollectionCache = new HashMap();
				sessiondb = mongoClient.getDB( "sessiondb" );
				jonersafesessiondb = sessiondb.withWriteConcern(WriteConcern.JOURNALED);
				configdb = mongoClient.getDB( "sessionconfdb" );
			}
			finally
			{
				initSessionDB = true;
			}
		}
	}
	public static Set getSessionDBCollectionNames()
	{
		initSessionDB();
		MongoIterable names = sessiondb.listCollectionNames();

		Set set = new HashSet<>();
		names.into(set);
//		Iterator iterator = names.iterator();
//		while (iterator.hasNext()){
//			set.add(iterator.next());
//		}
		return  set;
	}
	
	public static MongoCollection getSessionCollection(String app)
	{
		initSessionDB();
		return sessiondb.getCollection(app);
	}
	public static MongoClient getMongoClient(String name)
	{
		MongoDB mongoDB = null;
		if(StringUtil.isEmpty(name))
		{
			mongoDB = context.getTBeanObject(defaultMongoDB, MongoDB.class);
		}
		else
			mongoDB = context.getTBeanObject(name, MongoDB.class);
		return mongoDB == null?null:mongoDB.getMongo();
	}

	public static MongoClient getMongoClient()
	{
		return getMongoClient(null);
	}
	
//	public static void destory()
//	{
//		if(closeDB)
//			return;
//		try
//		{
//			if(mongoClient != null)
//			{
//				try {
//					mongoClient.close();
//				} catch (Exception e) {
//					log.error("", e);
//				}
//			}
//		}
//		finally
//		{
//			closeDB = true;
//		}
//		
//	}


	
	public static boolean filter(String key) {
		return SessionUtil.filter(key);
			
	}
	
	public static String getAppSessionTableName(String appKey)
	{
		return appKey+"_sessions";
	}
	
	public static MongoCollection getAppSessionDBCollection(String appKey)
	{
		initSessionDB();
		String tablename = getAppSessionTableName( appKey);
		MongoCollection sessions = sessiondb.getCollection(tablename);
//		 sessions.ensureIndex("sessionid");
		 String idxname = tablename+":sessionid";
		 if(!dbcollectionCache.containsKey(idxname))
		 {
			 dbcollectionCache.put(idxname, ovalue);
			 sessions.createIndex(new BasicDBObject( "sessionid" , 1 ));
			
		 }
		 
		 return sessions;
	}

	public static MongoCollection getJOURNALEDAppSessionDBCollection(String appKey)
	{
		initSessionDB();
		String tablename = getAppSessionTableName( appKey);
		MongoCollection sessions = jonersafesessiondb.withWriteConcern( WriteConcern.JOURNALED).getCollection(tablename);
//		 sessions.ensureIndex("sessionid");
		String idxname = tablename+":sessionid";
		if(!dbcollectionCache.containsKey(idxname))
		{
			dbcollectionCache.put(idxname, ovalue);
			sessions.createIndex(new BasicDBObject( "sessionid" , 1 ));

		}

		return sessions;
	}


	public static MongoDatabase getDB(String poolname, String dbname)
	{
		return MongoDBHelper.getMongoClient(poolname).getDB( dbname );
	}
	
	public static MongoCollection  getConfigSessionDBCollection()
	{
		initSessionDB();
		MongoCollection  sessionconf = configdb.getCollection("sessionconf");
//		 sessions.ensureIndex("sessionid");
		if(!configdbindexed)
		{
			sessionconf.createIndex(new BasicDBObject( "appcode" , 1 ));
			configdbindexed = true;
		}
		return sessionconf;
	}
	
	public static Map toMap(Document object,boolean deserial) {

		Set set = object.keySet();
		if (set != null && set.size() > 0) {
			Map attrs = new HashMap();
			Iterator it = set.iterator();
			while (it.hasNext()) {
				String key = (String) it.next();
				if (!filter(key)) {
					Object value = object.get(key);
					try {
						attrs.put(MongoDBHelper.recoverSpecialChar(key),
								deserial?SessionUtil.unserial((String) value):value);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			return attrs;
		}
		return null;
	}
	
	public static Map toMap(String appkey,String contextpath,DBObject object,boolean deserial) {

		Set set = object.keySet();
		if (set != null && set.size() > 0) {
			Map attrs = new HashMap();
			Iterator it = set.iterator();
			while (it.hasNext()) {
				String key = (String) it.next();
				if (!filter(key)) {
					Object value = object.get(key);
					try {
						String temp = MongoDBHelper.recoverSpecialChar(key);
						temp = SessionUtil.dewraperAttributeName(appkey, contextpath, temp);
						if(temp != null)
							attrs.put(temp,
									deserial?SessionUtil.unserial((String) value):value);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			return attrs;
		}
		return null;
	}
	
	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy