参考:https://blog.csdn.net/cl534854121/article/details/76121156
实现功能:同一账户如果在不同地点多次登陆,新的登陆会将旧的登陆者挤出,旧登陆者实现页面跳转,类似qq登陆功能
解决思路:
1.用户登陆,验证账号密码
2.建立一个存储username和sessionId的map,验证过账号密码的用户,对其用户名在map中进行判断,如果找不到username或者session为空,则视为第一次登陆,将其username和sessionId记录,并将这个session进行保存,设置session的islogin标志
3.当同一账号的新用户登陆,验证过账号密码后,map中相应的username存有原来的sessionId,则判断该登陆者为新的登陆者,利用sessionId将旧登陆者的session找出,并设置新旧两个session的isLogin属性
4.拦截器对请求进行拦截,判断isLogin属性,进行页面跳转
//前面为验证用户名和密码
MySessionContext myc = MySessionContext.getInstance();
// 账号密码验证成功,判断是否已经登陆.如果已经有账号登陆,删除原有,记录新登陆的账号
if (LoginUserMap.isInLoginUsers(username, session.getId())) {
// 根据username获得上次登陆的sessionId,并根据sessionId获得sess
String sessionId = LoginUserMap.getSessionId(username);
System.out.println("得到的上次sessionId为:" + sessionId);
HttpSession sess = myc.getSession(sessionId);
// 将新登陆的加入map,旧登陆的更改isLogin
sess.setAttribute("isLogin", "false");
//根据sessionId将原有记录移除
LoginUserMap.removeUser(sessionId);
//将新登陆者信息加入map
LoginUserMap.setLoginUs