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