j2ee实现强行挤掉重复登录用户

总体思想:服务器管理session,每个用户一个sessionid,`当用户登录时判断,如果不存在则加入,如果已经存在,删除之前的seseionid,添加现在的sessionid. 其次设置过滤器,如果当前用户的sessionid,在服务器管理session的数据里消失了,则可以认为被挤掉,退到登录页。
1. 管理session部分
package www.pdwy.tools;
import javax.servlet.http.*;
import java.util.*;
public class SessionListener implements HttpSessionListener,HttpSessionBindingListener{
private static HashMap hUserName = new HashMap();//保存sessionID和username的映射 


 
public void sessionCreated(HttpSessionEvent se){ 



public void sessionDestroyed(HttpSessionEvent se){ 
 hUserName.remove( se.getSession().getId() ); 
}


public static boolean isAlreadyEnter(HttpSession session,String sUserName){ 
 boolean flag = false; 
 if(hUserName.containsValue(sUserName)){//如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在hUserName中 
 flag = true; 


 //遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和username) 
 Iterator iter = hUserName.entrySet().iterator(); 
 while (iter.hasNext()) { 
 Map.Entry entry = (Map.Entry)iter.next(); 
 Object key = entry.getKey(); 
 Object val = entry.getValue(); 
 if( ( (String)val ).equals(sUserName) ){ 
 hUserName.remove(key); 
 } 
 } 
 hUserName.put( session.getId(),sUserName );//添加现在的sessionID和username 
 System.out.println("hUserName = " + hUserName); 
 } 
 else{//如果该用户没登录过,直接添加现在的sessionID和username 
 flag = false; 
 hUserName.put( session.getId(),sUserName ); 
 System.out.println("hUserName = " + hUserName); 
 } 
 return flag; 





public static boolean isOnline(HttpSession session){ 
 boolean flag = true; 
 if( hUserName.containsKey( session.getId() ) ){ 
 flag = true; 
 } 
 else{ 
 flag = false; 
 } 
 return flag; 
 } 




public static boolean isOnline(String userName){
 boolean flag = false; 
 if(hUserName.containsValue(userName)){
 flag = true; 
 }
 return flag;
}




public static void deleteCurUserSession(String userName){
 
 Iterator iter = hUserName.entrySet().iterator(); 
 while (iter.hasNext()) { 
 Map.Entry entry = (Map.Entry)iter.next(); 
 Object key = entry.getKey(); 
 Object val = entry.getValue(); 
 if( ( (String)val ).equals(userName)){ 
 hUserName.remove(key); 
 } 
 } 
}
public void valueBound(HttpSessionBindingEvent e) {
 
}
public void valueUnbound(HttpSessionBindingEvent e) {
 deleteCurUserSession(e.getName());
}
}
2. 登录部分核心代码
 。。。。。
 private SessionListener sessionListener = new SessionListener();
 。。。。。
 request.getSession().setAttribute(userName,sessionListener);
3. 过滤器核心代码
 if (!SessionListener.isOnline(req.getSession())){
 rep.sendRedirect(req.getContextPath()+"/login.jsp?msg=4");
 }
4. 登录页核心代码
 String warnCode = request.getParameter("msg");
 <%if("4".equals(warnCode)){%>
 alert("您的用户在另一个地方登陆,您已被强行下线");
 <%}%>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值