java实现单一登录 踢人效果

1、建一个session监听类

public class SessionListener implements HttpSessionListener{
         public static HashMap sessionMap = new HashMap();
         public void sessionCreated(HttpSessionEvent hse) {
               HttpSession session = hse.getSession();
         }
         public void sessionDestroyed(HttpSessionEvent hse) {
               HttpSession session = hse.getSession();
               this.DelSession(session);
         }
         public static synchronized void DelSession(HttpSession session) {
                if (session != null) {
                       // 删除单一登录中记录的变量
                      if(session.getAttribute("users")!=null){
                            TblUser tu =(TblUser)session.getAttribute("users");
                            SessionListener.sessionMap.remove(tu.getUserID());     
                      }
                }
         }

}

2、登录调用的方法

public ResultObject updateUserLoginAjax(HttpSession session ,String uname,String upwd               )throws Exception{
    //用户名及密码的判断省略
    // 1.实现单一登录 踢人效果
    if ( null != SessionListener.sessionMap.get(tu.getUserID())) {   
           //第一次登录的用户session销毁
           //将第一次登录用户的信息从map中移除
           BaseAction.forceLogoutUser(tu.getUserID());
           //本次登录用户添加到map中                                                                    
           SessionListener.sessionMap.put(tu.getUserID(), session);                                                                               
    } else{      
             //以用户id为key键存入map中,以判断下一次登录的人
             SessionListener.sessionMap.put(tu.getUserID(), session);
    }
}

3、2步骤中BaseAction中调用的forceLogoutUser()的方法

 /**
     *
     * @author 
     * @params uid 要强行退出的用户的ID
     * @return
     * @description 通过用户ID来强行把已经在线的用户的登录信息
     */
         @SuppressWarnings("unchecked")
         public static void forceLogoutUser(Long uid) {
                   // 删除单一登录中记录的变量
                   if (SessionListener.sessionMap.get(uid) != null) {
                            HttpSession hs = (HttpSession) SessionListener.sessionMap.get(uid);
                            SessionListener.sessionMap.remove(uid);
                            Enumeration e = hs.getAttributeNames();
                            while (e.hasMoreElements()) {
                                     String sessionName = (String) e.nextElement();
                                     // 清空session
                                     hs.removeAttribute(sessionName);
                            }
                            // hs.invalidate();
                   }
         }
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值