操作界面
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低代碼開發平台
請關注我,本星球會持續推出更多的開源項目代碼解析,如有更好的意見請留言回複或者私信。