唯一登陆

663 阅读1分钟

在此,简单地聊聊同一账号不允许同时登陆的两种解决方案:

  • 登陆成功后返回前端token(含有时间撮),并将token保存到Redis或数据库中。每次请求都对比入参token和DB中的token是否一致?不一致,则返回消息并跳到登陆页。处理方法上可参考上一篇文章:[登陆成功后7天无操作需再次登陆]
  • 监听器可以监听Session及其所包含的属性(Attribute)
    1. 建立一个监听器,实现HttpSessionAttributeListener接口
    2. 用户登陆时将用户关键字段存入session中,将session放入map中
    3. 每个新会话开启时,在监听器中对Session包含的属性进行判断,如果新增的属性与map中已有session的用户关键数据相同则移除已登陆的session
    /**
     * 唯一登陆监听器
     */
    public class MyListener implements HttpSessionAttributeListener{
    
        // 存放用户登陆信息
        Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();
    
        public void checkAttributeAdded(HttpSessionBindingEvent event) {
          // TODO 具体逻辑
    
        }
    
    }