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

com.frameworkset.platform.security.OnLineUser Maven / Gradle / Ivy

package com.frameworkset.platform.security;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.frameworkset.platform.config.ConfigManager;

/**
 * 在线用户管理类
 * @author biaoping.yin
 * @date create on 2006-8-10
 * @version 1.0
 */
public class OnLineUser {

	boolean ischecking = false;
	private Map users ;
	public static final String cluster_session_synchronize = "cluster.session.synchronize";
	public static boolean enablesessioncluster = ConfigManager.getInstance().getConfigBooleanValue(cluster_session_synchronize, false);
//	AopMapContainer countMap ; 
	public static final String cluster_session_aop = "cluster.session.aop";
	public static boolean enablesessionaop = ConfigManager.getInstance().getConfigBooleanValue(cluster_session_aop, false);
	public OnLineUser() {
		if(enablesessioncluster)
		{
//			countMap = new AopMapContainer("/onlineusers");
//			try {
//				UserCount c = (UserCount)countMap.getJBOSSTreecacheAOPContainer()
//				.getTreeCacheAop()
//				.getObject("/onlineusercount");
//				if(c == null)
//				{
//					countMap.getJBOSSTreecacheAOPContainer()
//							.getTreeCacheAop()
//							.putObject("/onlineusercount", new UserCount());
//				}
//
//			} catch (CacheException e) {
//				
//				e.printStackTrace();
//			}
//			users = countMap;
			users = new HashMap();
		}
		else
		{
			users = new HashMap();
		}
	}
	
	private UserCount onlineuserCount = new UserCount();

	public int getCount() {

		return getUserCount().getOnlineuserCount();
	}

	public boolean existUser(String userName) {		
		init();
		synchronized(users)
		{
			return users.get(userName) != null;
		}
	}
	
	/**
	 * 判断用户sessionId是否被注销掉
	 * @param userName
	 * @param sessionId
	 * @return
	 */
	public boolean existUser(String userName,String sessionId) {		
		init();
		synchronized(users)
		{
			LineUser user = (LineUser)users.get(userName) ;
			if(user == null)
				return false;
			return user.containSession(sessionId);
			
		}
	}

	public boolean deleteUser(String sessionId,String userName,String ip,String macaddr) {
		init();
		synchronized(users)
		{
			if (existUser(userName)) {
				LineUser user = (LineUser)users.get(userName);
				boolean succ = user.deleteContext(sessionId,this,ip,macaddr);
				if(!succ)
				{
					users.remove(userName);
				}
				return true;
			}
		}
		
		return false;
	}

	public void valueBound(String sessionId,String userName,String ip, String macaddr,String DNSName,
			String serverIp,String serverport) {
		init();
		Date loginTime = new Date();
//		checkValid();
		synchronized(users)
		{
			UserCount c = getUserCount();
			int j = c.getOnlineuserCount();
			if (!existUser(userName)) {
				LineUser lineuser = new LineUser(userName);
				boolean suc = lineuser.addLineContext(sessionId,this,userName,ip,loginTime,  macaddr,DNSName,
						 serverIp, serverport);
				if(suc)
				{
					users.put(userName,lineuser);
//					getUserCount().onlineuserCount ++;
					j ++;
				}
				
			} 
			else
			{
				if(ConfigManager.getInstance().getConfigBooleanValue("enablemutilogin",true) 
						|| AccessControl.isAdmin(userName)
						|| AccessControl.isOrgManager(userName))
				{
					
					LineUser lineUser = (LineUser)users.get(userName);
					boolean success = lineUser.addLineContext(sessionId,this,userName,ip,loginTime,  macaddr,DNSName,
							serverIp,serverport);
					if(success)
					{
//						getUserCount().onlineuserCount ++;
						j ++;
					}
				}
			}
			c.setOnlineuserCount(j);
			setUserCount(c);
		}
	}
	
//	/**
//	 * 检测用户是否有效
//	 */
//	private synchronized void checkValid() {	
//		init();
//		if(ischecking)
//			return ;
//		else
//		{
//			ischecking = true;
////			this.notify();
//		}
//		
//	}

	public void valueUnbound(String sessionId,String userName,String ip,String macaddr) {
		init();
		deleteUser(sessionId,userName,ip,macaddr);
	}
	
	public String getUserLoginInfo(String userName)
	{
		init();
//		synchronized(users){
			Object userLoginInfo = users.get(userName);
			return userLoginInfo == null ?"":userLoginInfo.toString();
//		}
	}

	public Collection getOnLineUser() {
		init();
		synchronized(users){	
			return this.users.values();
		}
	}
	
	public boolean removeUser(String userName){
		init();
		synchronized(users)
		{
			if (existUser(userName)) {
				LineUser user = (LineUser)users.get(userName);
				user.deleteAllContext(this);
				users.remove(userName);
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 
	 * @param selectUserName 
	 * @param curUserName
	 * @return
	 */
	public boolean removeUsers(String[] selectUserName,String curUserName){
		init();
		boolean state = false;
		synchronized(users)
		{
			for(int i = 0; i < selectUserName.length; i++){
				String[] selNames = selectUserName[i].split("\\$");
				if(selNames.length >= 4){
					if (existUser(selNames[0])) {
//						if(selNames[0].equals(curUserName)){
							state = this.deleteUser(selNames[1], selNames[0], selNames[2],selNames[3]);
//						}else{
//							state = this.removeUser(selNames[0]);
//						}
					}
				}
				else if(selNames.length == 3)
				{
//					if (existUser(selNames[0])) {
//						if(selNames[0].equals(curUserName)){
							state = this.deleteUser(selNames[1], selNames[0], selNames[2],null);
//						}else{
//							state = this.removeUser(selNames[0]);
//						}
//					}
				}
				else if(selNames.length == 2)
				{
					state = this.deleteUser(selNames[1], selNames[0], null,null);
				}
				else{
					return false;
				}
			}
		}
		return state;
	}
	
	/**
	 * 删除所有用户会话
	 * @return
	 */
	public boolean removeAllUser(){
		init();
		synchronized(users)
		{
			users.clear();
			UserCount c = getUserCount();
			c.setOnlineuserCount(0);
			setUserCount(c);
			return true;
		}
	}
	
	/**
	 * 保留自己删除其他用户会话
	 * @param userName
	 * @return
	 */
	public boolean removeAllUserExcludeSelf(String userName,String sessionId, String ip, String macaddr,String DNSName,
			String serverIp,String serverport){
		init();
		synchronized(users)
		{
			LineUser lineUser = (LineUser)users.get(userName);
			String key = sessionId;
			LineContext lineContext = lineUser.getIncludeLineContextsByIdx(key);
			users.clear();
			if(lineContext != null){
//				System.out.println("lineUser.getContextSize()old = " + lineUser.getContextSize());
//				System.out.println("users.size()clear = " + users.size());
				lineUser.deleteAllContext(this);
				this.valueBound(sessionId, userName, ip,  macaddr,DNSName,
						serverIp,serverport);
				lineUser.putLineContext(key, lineContext);
				UserCount c = getUserCount();
				c.setOnlineuserCount(lineUser.getContextSize()); 
				this.setUserCount(c);
//				System.out.println("users.size()new = " + users.size());
				//this.valueBound(sessionId, userName, ip);
				//this.onlineuserCount = 1;+
//				System.out.println("lineUser.getContextSize()new = " + lineUser.getContextSize());
			}else{
				UserCount c = getUserCount();
				c.setOnlineuserCount(0);
				this.setUserCount(c);
			}
			return true;
		}
	}
	boolean inited = false;
	private void init()
	{
		if(users == null)
		{
			synchronized(users)
			{
				if(inited )
				{
					return;
				}
				if(enablesessioncluster)
				{
//					countMap = new AopMapContainer("/onlineusers");
//					try {
//						countMap.getJBOSSTreecacheAOPContainer()
//								.getTreeCacheAop()
//								.putObject("/onlineusercount", new UserCount());
//					} catch (CacheException e) {
//						
//						e.printStackTrace();
//					}
//					users = countMap;
					users = new HashMap();
				}
				else
				{
					users = new HashMap();
					
				}
				inited = true;
			}
		}
	}
	
	public UserCount getUserCount()
	{
		if(!enablesessioncluster)
		{
			
			return this.onlineuserCount;
		}
		else
		{
			return this.onlineuserCount;
			
//			try {
//				UserCount c = (UserCount) this.countMap.getJBOSSTreecacheAOPContainer()
//				.getTreeCacheAop()
//				.getObject("/onlineusercount");
//				return c;
//			} catch (CacheException e) {
//				
//				e.printStackTrace();
//				return this.onlineuserCount;
//			}
//			 catch (Exception e) {
//					
//				e.printStackTrace();
//				return this.onlineuserCount;
//			}
		}
	}
	
	public void setUserCount(UserCount uc)
	{
//		if(!enablesessionaop && enablesessioncluster)
//		{
//			try {
//				this.countMap.getJBOSSTreecacheAOPContainer()
//				.getTreeCacheAop()
//				.putObject("/onlineusercount",uc);
//			} catch (CacheException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//		}
	}
	
	public LineUser getLineUser(String userAccount)
	{
		return (LineUser)this.users.get(userAccount);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy