在线登录用户统计只统计登录后嘚在线用户忽略未登录的用户,并且同一帐号不允许多次登录即当用户登录时,如果该用户帐号已经在其他地方登录则自动踢出之湔登录的用户。登录标识为Session中logonUserView属性是否为null实现原理:借助HttpSessionAttributeListener和HttpSessionListener来实现。用户登录时如果密码验证通过,则判断改用户是否已经登录如果已经登录则将之前登录的用户强制注销,然后将记录这用户信息的LogonUserView对象放入当前session这时候HttpSessionAttributeListener的attributeAdded事件被触发,该用户被记录到在线用户列表用户注销时或Session自动失效时,会触发HttpSessionListener的sessionDestroyed事件从在线用户列表中移除注销用户。具体实现代码如下:
// 省略其他属性和get、set方法// 在线用户对应Session踢用户时使用 // 省略其他属性和get、set方法
3. 登录方法(片段)
// 检测是否是在不同浏览器下已有相同用户Id的用户登陆
// 在不同机器上登陆,提示否则不提示
// 强制注销之前登陆用户,并将该用户从在线用户列表删除
// 绑定登陆用户信息到Session监听器自动将该用户添加到在线用户列表
4. 注销方法(片段)
// 将当前用户添加到在线用户列表中
// 获取当前登陆用户信息及session
// 创建在线用户信息对象
// 添加到在线用户列表
// 更新在线用户信息
// 获取当前登陆用户信息
// 循环查找被替换用户在线信息
// 更新在线用户信息
// 获取当前登陆用户信息及session
// 从在线用户列表移除用户
该统计方法在集群環境下无法使用,集群环境可以将在线用户信息存入数据库各服务器连接统一数据库