/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.sso.online.database;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.jinhe.tss.core.persistence.ICommonDao;
import com.jinhe.tss.core.sso.online.IOnlineUserManager;
import com.jinhe.tss.core.sso.online.OnlineUser;
/**
* <p> DBOnlineUserManager.java </p>
*
* 在线用户库(数据库)
*/
@Transactional
public class DBOnlineUserManager implements IOnlineUserManager {
@Autowired private ICommonDao dao;
/*
* 根据 SessionId,应用Code 找到用户并将用户的sessionId置为Null,表示已经注销。
* 不删除用户记录,方便以后查询用户的登录历史。
*/
public String logout(String appCode, String sessionId) {
String hql = " from DBOnlineUser o where o.appCode = ? and o.sessionId = ? ";
List<?> entityList = dao.getEntities(hql, new Object[] {appCode, sessionId});
String token = null;
if(entityList.size() > 0) {
for(Object entity : entityList) {
DBOnlineUser temp = (DBOnlineUser) entity;
token = temp.getToken();
temp.setToken(null);
temp.setSessionId(null);
dao.create(temp);
}
}
return token;
}
public boolean isOnline(String token) {
String hql = " from DBOnlineUser o where o.token = ? ";
List<?> list = dao.getEntities(hql, new Object[] {token});
return !(list == null || list.isEmpty());
}
public Set<OnlineUser> getOnlineUsersByToken(String token) {
String hql = " from DBOnlineUser o where o.token = ? ";
@SuppressWarnings("unchecked")
List<DBOnlineUser> list = (List<DBOnlineUser>) dao.getEntities(hql, new Object[] {token});
Set<OnlineUser> onlineUsers = new HashSet<OnlineUser>();
for(DBOnlineUser entity : list) {
OnlineUser temp = new OnlineUser(entity.getUserId(), entity.getAppCode(), entity.getSessionId(), entity.getToken());
onlineUsers.add(temp);
}
return onlineUsers;
}
@SuppressWarnings("unchecked")
public Collection<String> getOnlineUserNames() {
String hql = "select distinct o.userName from DBOnlineUser o where o.token is not null ";
return (Collection<String>) dao.getEntities(hql);
}
/*
* 如果在线用户库中没有相同的用户存在, 则在在线用户库中添加此记录
*/
public void register(String token, String appCode, String sessionId, Long userId, String userName) {
DBOnlineUser entity = new DBOnlineUser(userId, sessionId, appCode, token, userName);
dao.create(entity);
}
}