文档库 最新最全的文档下载
当前位置:文档库 › 限制同一用户登录

限制同一用户登录

1、建立一个监听器,实现HttpSessionAttributeListener接口,监听每一个Attribute的增加、编辑、删除事件。监听器中还要建立一个map,将所有的session放入这个map中。

2、在用户登录时将用户名、物理地址、Session id存到Session中去(可以建立一个用户登录地址数据传输对象,我建立了一个UserSessionAdd类,里面包含username,macAdd,sessionId三个属性,用户登录时将这个数据对象初始化,并存入到session中)。

3、每个新会话开启时,在监听器中对Session包含的属性进行判断,如果新增的属性与map中已有session的用户登录地址数据相同,则表示新会话与我们要做的两个限制相冲突。将与之冲突的会话提取出来,销毁掉!

这么说,还是不够清楚,下面看代码:

Web.xml文件:
Xml代码

监听器类的路径,如:com.web.MyListener


用户登录地址数据传输对象:.
Java代码
public class UserSessionAdd {

private String add;

private String sessid;

private String username

public String getUsername(){
return username
}

Public void setUsername(String username){
https://www.wendangku.net/doc/1a18826409.html,ername=username;
}

public String getIp() {
return add;
}

public void setAdd(String add) {
this.add = add;
}

public String getSessid() {
return sessid;
}

public void setSessid(String sessid) {
this.sessid = sessid;
}
}


用户登录的代码:

Java代码
......
String userHost = request.getRemoteHost();
String sessionId = request.getSession().getId();
UserSessionAdd usa = new UserSessionAdd();
usa.setUsername(username);
usa.setSessid(sessionId);
usa.setAdd(userHost);
request.getSession().setAttribute(“usa”,usa);
......




监听器代码:

Java代码
public class MyListener implements HttpSessionAttributeListener{

Map map = new HashMap();

public void attributeAdded(HttpSessionBindingEvent event) {
String name = event.getName();
if(name.equals("usa")){
UserSessionAdd usa = (UserSessionAdd)event.getValue();
if(map.get(usa.getAdd())!=null){
HttpSession sess = map.get(usa.getAdd());
UserSessionAdd usa1 = (UserSessionAdd)sess.getAttribute("usa");
sess.removeAttribute("usa");
sess.invalidate();
}
map.put(usa.getAdd(), event.getSession());
}
}

public void attributeRemoved(HttpSessionBindingEvent event) {
String name = event.getName();
if(name.eq

uals("usa")){
UserSessionAdd usa = (UserSessionAdd)event.getValue();
map.remove(usa.getAdd());
}
}

public void attributeReplaced(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
......
}
}

相关文档