java登录总掉_javaweb 禁止账号重复登录,后登录账号踢掉之前登录账号

本文介绍如何在JavaWeb应用中实现账号重复登录时,后登录的账号挤掉之前已登录的账号。主要步骤包括创建全局Session Map、登录控制器中处理重复登录与检查、登录操作后的更新、前端JS定时检查以及使用监听器处理Session销毁。通过这些步骤,确保了账号的安全性和唯一在线性。
摘要由CSDN通过智能技术生成

功能目标:

账号在其他地方登录后,当前登录账号被迫下线

步骤:

1、新建两个全局map

//session map,用以实现挤掉相同账号

//key:登录账号;value:session对象

public staticMapSESSION_MAP=newHashMap();

//登录用户被挤掉后存放提示消息

//key:sessionId;value:提示消息

public staticMapMSG_MAP=newHashMap();

2、登录控制器中创建两个方法

public voidrepeatOperate(){

Object uObj = getSession().getAttribute(Environment.GLOBAL_USER_OBJECT);

if(uObj ==null)

return;

User user = (User)uObj;

HttpSession session = Environment.SESSION_MAP.remove(user.getLogin());

if(session ==null)

return;

Environment.MSG_MAP.put(session.getId(),"账号在其他地方登录,您已被迫下线!");

logoutSession(session);

}

public voidcheckUserOnline() {

JSONObject json =newJSONObject();

String sessionId = getSession().getId();

json.put("msg", Environment.MSG_MAP.remove(sessionId));

response.setContentType("text/html;charset=utf-8");

try{

response.getWriter().print(json);

}catch(IOException e) {

e.printStackTrace();

}

}

3、登录控制器的login()方法中添加

登录操作完成后:

repeatOperate();

Environment.SESSION_MAP.put(user.getLogin(), getSession());

4、JS代码

在公共js中添加:

varcheck;

functioncheckUserOnline(){

$.ajax({

type:"POST",

url:"/checkUserOnlineLogin.action",

data:{},

dataType:'json',

success:function(data){

varmsg = data.msg;

if(msg !=null&& msg !=""&& msg != undefined){

clearInterval(check);

alert(msg);

//注销登录

logOut();

}

}

});

}

$(document).ready(function(){

//账号重复登录检查

check = setInterval("checkUserOnline()",5000);

}

5、新建监听器

package com.regaltec.esa.common.listener;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

import com.regaltec.esa.common.cfg.Environment;

import com.regaltec.esa.sys.entity.User;

public class SessionListener implements HttpSessionListener{

@Override

public void sessionCreated(HttpSessionEvent arg0) {

// TODO Auto-generated method stub

}

/**

* session超时后,删除SESSION_MAP和MSG_MAP中的冗余信息

*/

@Override

public void sessionDestroyed(HttpSessionEvent event) {

HttpSession session = event.getSession();

Object o = session.getAttribute(Environment.GLOBAL_USER_OBJECT);

if(o == null)

return;

User user = (User)o;

Environment.SESSION_MAP.remove(user.getLogin());

Environment.MSG_MAP.remove(session.getId());

}

}

web.xml配置

com.regaltec.esa.common.listener.SpringContextLoaderListenerlistener-class>

listener>

com.regaltec.esa.common.listener.SessionListenerlistener-class>

listener>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值