现在的我,不埋怨谁,不嘲笑谁,也不羡慕谁。阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。一切都好,真的,都很好。
分类: Java
2014-08-09 11:41:08
1、建一个session监听类
public class SessionListener implements HttpSessionListener{
public static HashMap sessionMap = new HashMap();
public void sessionCreated(HttpSessionEvent hse) {
HttpSession session = hse.getSession();
}
public void sessionDestroyed(HttpSessionEvent hse) {
HttpSession session = hse.getSession();
this.DelSession(session);
}
public static synchronized void DelSession(HttpSession session) {
if (session != null) {
// 删除单一登录中记录的变量
if(session.getAttribute("users")!=null){
TblUser tu = (TblUser)session.getAttribute("users");
SessionListener.sessionMap.remove(tu.getUserID());
}
}
}
}
2、登录调用的方法
public ResultObject updateUserLoginAjax(HttpSession session ,String uname,String upwd )throws Exception{
//用户名及密码的判断省略
// 1.实现单一登录 踢人效果
if ( null != SessionListener.sessionMap.get(tu.getUserID())) {
//第一次登录的用户session销毁
//将第一次登录用户的信息从map中移除
BaseAction.forceLogoutUser(tu.getUserID());
//本次登录用户添加到map中
SessionListener.sessionMap.put(tu.getUserID(), session);
} else{
//以用户id为key键存入map中,以判断下一次登录的人
SessionListener.sessionMap.put(tu.getUserID(), session);
}
}
3、2步骤中BaseAction中调用的forceLogoutUser()的方法
/**
*
* @author
* @params uid 要强行退出的用户的ID
* @return
* @description 通过用户ID来强行把已经在线的用户的登录信息
*/
@SuppressWarnings("unchecked")
public static void forceLogoutUser(Long uid) {
// 删除单一登录中记录的变量
if (SessionListener.sessionMap.get(uid) != null) {
HttpSession hs = (HttpSession) SessionListener.sessionMap.get(uid);
SessionListener.sessionMap.remove(uid);
Enumeration e = hs.getAttributeNames();
while (e.hasMoreElements()) {
String sessionName = (String) e.nextElement();
// 清空session
hs.removeAttribute(sessionName);
}
// hs.invalidate();
}
}