天天看点

若依非分离版-第五十八章:在线用户监控前后端源码拆解

作者:源码解析

操作界面

1、左侧菜单栏,系统监控-> 在线用户,展示已经登录的用户。

若依非分离版-第五十八章:在线用户监控前后端源码拆解

前端代码实现

前端代码路径

若依非分离版-第五十八章:在线用户监控前后端源码拆解

前端table配置,该配置的请求url地址是url: prefix + "/list",获取在线用户列表

var options = {
   uniqueId: "sessionId",
    url: prefix + "/list",
    exportUrl: prefix + "/export",
    sortName: "lastAccessTime",
    sortOrder: "desc",
    showExport: true,
    escape: true,
    columns: [{
        checkbox: true
    },
    {
              title: "序号",
              formatter: function (value, row, index) {
                   return $.table.serialNumber(index);
              }
          },
              
            

java后台代码

若依非分离版-第五十八章:在线用户监控前后端源码拆解
@RequiresPermissions("monitor:online:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(SysUserOnline userOnline)
{
    startPage();
    List<SysUserOnline> list = userOnlineService.selectUserOnlineList(userOnline);
    return getDataTable(list);
}           

强制退出用户

前端按钮绑定事件,按钮代码如下:

title: '操作',
align: 'center',
formatter: function(value, row, index) {
    var msg = '<a class="btn btn-danger btn-xs ' + forceFlag + '" href="javascript:void(0)" onclick="forceLogout(\'' + row.sessionId + '\')"><i class="fa fa-sign-out"></i>强退</a> ';
    return msg;
}           

如上述代码onclick="forceLogout(\'' + row.sessionId + '\')">,强制退出的绑定事件

具体执行方法

// 单条强退
function forceLogout(sessionId) {
    $.modal.confirm("确定要强制选中用户下线吗?", function() {
       var data = { "ids": sessionId };
        $.operate.post(prefix + "/batchForceLogout", data);
    })
}           

java后台处理代码

@RequiresPermissions(value = { "monitor:online:batchForceLogout", "monitor:online:forceLogout" }, logical = Logical.OR)
@Log(title = "在线用户", businessType = BusinessType.FORCE)
@PostMapping("/batchForceLogout")
@ResponseBody
public AjaxResult batchForceLogout(String ids)
{
    for (String sessionId : Convert.toStrArray(ids))
    {
        SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
        if (online == null)
        {
            return error("用户已下线");
        }
        OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId());
        if (onlineSession == null)
        {
            return error("用户已下线");
        }
        if (sessionId.equals(ShiroUtils.getSessionId()))
        {
            return error("当前登录用户无法强退");
        }
        onlineSessionDAO.delete(onlineSession);
        online.setStatus(OnlineStatus.off_line);
        userOnlineService.saveOnline(online);
        userOnlineService.removeUserCache(online.getLoginName(), sessionId);
    }
    return success();
}           

onlineSessionDAO.delete(onlineSession); 从session删除,用户登录失效

online.setStatus(OnlineStatus.off_line):设置状态已经离线

userOnlineService.removeUserCache(online.getLoginName(), sessionId);删除缓存

未来计划

1、ruoyi非分离版本拆解

2、ruoyi-vue-pro:讲解工作流

3、ruoyi-vue-pro:支付模块,电商模块

4、基于ruoyi-vue-pro项目开发

5、JEECG低代码开发平台

请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。

继续阅读