操作界面
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低代码开发平台
请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。