本文主要介绍的是如何简单地实现 web版的单点登录,
主要是实现,用户把自己之前登录的账号挤下去
不说废话 直接上代码
1,建立一个应用对象
在登录的action中
//创建application对象把所有登录的用户session存在里面
ServletContext application = request.getSession().getServletContext();
Collection<HttpSession> sessions = null;
if (application.getAttribute("usercount") == null) {
sessions = new ArrayList<HttpSession>();
application.setAttribute("usercount", sessions);
} else {
sessions = (Collection<HttpSession>) application
.getAttribute("usercount");
}
//已登录处理登录的用户
new LoginManager().login(sessions, session);
//括号里面是LoginManager类 用来清除 同意用户之前的session
此类里面已经处理了 session过期 的问题
(package com.tenchong.util;
import java.util.ArrayList;
import java.util.Collection;
import javax.servlet.http.HttpSession;
import com.tenchong.entity.TuserEntity;
public class LoginManager {
public HttpSession login(Collection<HttpSession> sessions,HttpSession session) {
ArrayList<HttpSession> sessionde=new ArrayList<HttpSession>();
for (HttpSession s : sessions) {
try {
if (((TuserEntity) s.getAttribute("user_session")).getId() == ((TuserEntity) session
.getAttribute("user_session")).getId()) {
sessions.remove(s); // 移除集合中的重复session元素
s.invalidate();// 废弃之前登陆的session
break;
}
} catch (Exception e) {
sessionde.add(s);
} finally {
}
}
for(int i=0;i<sessionde.size();i++){
sessions.remove((HttpSession)sessionde.get(i));
}
sessions.add(session);
return null;
}
} )
2.处理这些之后 手动退出的时候 要清除 application中的对应session
在loginout的 action中
Collection<HttpSession> sessions = (Collection<HttpSession>) application
.getAttribute("usercount");
sessions.remove(session);//session 是 request,getsession();