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(
"<script>window.top.location.href='/ssh2/save.jsp';alert('该账号已经在别处登录,请联系管理员或关闭ie,重新登录!');");
} else {
chain.dofilter(req, res);
}
}
}
}
web.xml的配置。
filter放在struts2拦截器的前面
com.test.action.user.userfilter
listener的配置
调用session.invalide()的方法会被监听到,销毁session
大概实现了,可能考虑不周:如果有问题共同探讨。