delphi 软件在线人数统计_SpringBoot + Shiro实现当前在线人数统计

作者 | 编程小白-郭旭

来源 | urlify.cn/jaayq2

实现思路

数据库中添加用户是否登录is_login字段,用来记录用户的登录状态,假设1表示在线;0表示未在线,则需要进行控制:

1)当用户登录成功时,设置用户登录状态为1

2)当用户退出登录时,设置用户登录状态为0

3)当session失效时,设置对应的用户的登录状态为0

实现方法

1、更改数据库字段,编写登录状态更新函数

添加字段后,编写状态更新函数

/** 更改用户登录状态 */void updateLoginStatus(@Param("userId") String userId, @Param("islogin") Integer islogin);
        UPDATE `user` SET `islogin`=#{islogin} WHERE id = #{userId}

2、自定义SessionLinstener,重写监听函数

自定义一个类ShiroSessionLinstener,继承SessionLinstenerAdapter类,同时重写监听函数

1)session创建时,输出sessionId,不进行任何操作

2)session停止时,输入sessionId和session存储的用户Id,不进行任何操作

3)session失效时,输入sessionId,重置对应的用户的登录状态为0

public class ShiroSessionListener extends SessionListenerAdapter {    @Resource    private UserService userService;    // session创建    @Override    public void onStart(Session session) {        super.onStart(session);        System.out.println("session创建,sessionId:" + session.getId());    }    // session停止    @Override    public void onStop(Session session) {        System.out.println("session停止,sessionId:" + session.getId() +",用户id:" + session.getAttribute("loginUserId"));    }    // session失效    @Override    public void onExpiration(Session session) {        // 重置登录状态        userService.updateLoginStatus(session.getAttribute("loginUserId").toString(), LoginStatusEnum.NOT_LOGIN.getCode());        System.out.println("session失效,sessionId:" + session.getId() +",用户id:" + session.getAttribute("loginUserId"));    }}

3、配置session监听及属性(均通过SessionManager进行配置)

1)使用setGlobalSessionTimeout(1800000L)设置session的过期时间为30分钟(可自定义)

2)使用setSessionValidationSchedulerEnabled(true)开启session检查

3)使用setSessionValidationInterval(15 * 60 * 1000L)设置检查间隔为15分钟

4)设置监听类为第2步自定义的类

Collection listeners = new ArrayList<>();listeners.add(shiroSessionListener());sessionManager.setSessionListeners(listeners);
454726ff9696313deebbb2517f5dace3.png

最后不要忘记把SessionManager配置到ShiroConfig中

4、编写查询函数查询在线人数

/** 获取在线人数 */Integer getLoginCount();
    SELECT count(1) FROM `user` WHERE `is_login` = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值