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

操作界面

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")
@ResponseBodypublic 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低代码开发平台

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

来源: 互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。

赞 ()

相关推荐

发表回复

评论列表

点击查看更多

    联系我们

    在线咨询: QQ交谈

    微信:13450247865

    邮件:451255340#qq.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    微信