public class userlistener implements httpsessionlistener {
public void sessioncreated(httpsessionevent event) {
}
@suppresswarnings("unchecked")
public void sessiondestroyed(httpsessionevent event) {
httpsession session = event.getsession();
// 取得登录的用户名
string username = (string) session.getattribute("username");
servletcontext application = session.getservletcontext();
system.out.println("listener开始");
system.out.println("sessionid:"+session.getid());
system.out.println("username:"+username);
// 获取在线列表
map onlineuserlist = (map) application.getattribute("onlineuserlist");
//session超时删除用户,重复登录登录时已删除,不再删了
if(onlineuserlist.containskey(username) && (onlineuserlist.get(username).equals(session.getid())) )
{
onlineuserlist.remove(username);
servletactioncontext.getservletcontext().setattribute("onlineuserlist", onlineuserlist);
}
system.out.println("onlineuserlist:"+onlineuserlist);
system.out.println("listener结束");
}
}
3.filter
public class userfilter implements filter {
public void init(filterconfig config) throws servletexception {
}
public void destroy() {
}
@suppresswarnings("unchecked")
public void dofilter(servletrequest req, servletresponse res,
filterchain chain) throws ioexception, servletexception {
httpservletrequest request = (httpservletrequest) req;
httpservletresponse response = (httpservletresponse) res;
httpsession session = request.getsession();
system.out.println("过滤filter开始");
// 从servletcontext中取出list
map sessionlist = (map) session
.getservletcontext().getattribute("onlineuserlist");
system.out.println("sessionlist:" + sessionlist);
if (sessionlist == null) {
sessionlist = new hashmap();
}
string username = (string) session.getattribute("username");
system.out.println("username:" + username);
system.out.println("sessionid:" + session.getid());
//因为过滤所有页面web.xml配置的是/*,第一次登陆username为空,得让可以登录
if (null == username) {
chain.dofilter(req, res);
system.out.println("过滤filter结束username=null");
} else {
// 用于记录状态
boolean temp = false;
system.out.println(sessionlist.containskey(username));
system.out.println(sessionlist.get(username));
system.out.println(sessionlist.get(username)
.equals(session.getid()));
if (sessionlist.containskey(username)
&& sessionlist.get(username).equals(session.getid())) {
// session值与当前id匹配,说明同一个用户
temp = true;
system.out.println("过滤filter结束,同一个用户");
}
// 存在了第二次登陆,销毁session
system.out.println("temp:" + temp);
if (!temp) {
session.invalidate();
response.setcharacterencoding("utf-8");
response.setcontenttype("text/html; charset=utf-8");
//转向的首页,根据自己项目
response
.getwriter()
.print(
"");
} else {
chain.dofilter(req, res);
}
}
}
}