天天看點

若依非分離版-第五十八章:線上使用者監控前後端源碼拆解

作者:源碼解析

操作界面

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低代碼開發平台

請關注我,本星球會持續推出更多的開源項目代碼解析,如有更好的意見請留言回複或者私信。

繼續閱讀