新增在线用户监控,可踢出在线用户
This commit is contained in:
parent
acb5c077da
commit
4889941a78
|
@ -0,0 +1,75 @@
|
||||||
|
package net.maku.monitor.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import net.maku.framework.common.cache.RedisCache;
|
||||||
|
import net.maku.framework.common.cache.RedisKeys;
|
||||||
|
import net.maku.framework.common.query.Query;
|
||||||
|
import net.maku.framework.common.utils.PageResult;
|
||||||
|
import net.maku.framework.common.utils.Result;
|
||||||
|
import net.maku.framework.security.cache.TokenStoreCache;
|
||||||
|
import net.maku.framework.security.user.UserDetail;
|
||||||
|
import net.maku.monitor.vo.UserOnlineVO;
|
||||||
|
import org.springdoc.core.annotations.ParameterObject;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("monitor/user")
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Tag(name = "在线用户监控")
|
||||||
|
public class UserOnlineController {
|
||||||
|
private final TokenStoreCache tokenStoreCache;
|
||||||
|
private final RedisCache redisCache;
|
||||||
|
|
||||||
|
@GetMapping("page")
|
||||||
|
@Operation(summary = "分页")
|
||||||
|
//@PreAuthorize("hasAuthority('monitor:user:all')")
|
||||||
|
public Result<PageResult<UserOnlineVO>> page(@ParameterObject @Valid Query query) {
|
||||||
|
// 获取登录用户的全部key
|
||||||
|
List<String> keys = tokenStoreCache.getUserKeyList();
|
||||||
|
|
||||||
|
// 逻辑分页
|
||||||
|
List<String> keyList = ListUtil.page(query.getPage() - 1, query.getLimit(), keys);
|
||||||
|
|
||||||
|
List<UserOnlineVO> userOnlineList = new ArrayList<>();
|
||||||
|
keyList.forEach(key -> {
|
||||||
|
UserDetail user = (UserDetail) redisCache.get(key);
|
||||||
|
if (user != null) {
|
||||||
|
UserOnlineVO userOnlineVO = new UserOnlineVO();
|
||||||
|
userOnlineVO.setId(user.getId());
|
||||||
|
userOnlineVO.setUsername(user.getUsername());
|
||||||
|
userOnlineVO.setRealName(user.getRealName());
|
||||||
|
userOnlineVO.setGender(user.getGender());
|
||||||
|
userOnlineVO.setEmail(user.getEmail());
|
||||||
|
userOnlineVO.setAccessToken(key.replace(RedisKeys.getAccessTokenKey(""), ""));
|
||||||
|
|
||||||
|
userOnlineList.add(userOnlineVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return Result.ok(new PageResult<>(userOnlineList, keyList.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("{accessToken}")
|
||||||
|
@Operation(summary = "强制退出")
|
||||||
|
//@PreAuthorize("hasAuthority('monitor:user:user')")
|
||||||
|
public Result<String> forceLogout(@PathVariable("accessToken") String accessToken) {
|
||||||
|
// token不能为空
|
||||||
|
if (StrUtil.isBlank(accessToken)) {
|
||||||
|
Result.error("token不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除用户信息
|
||||||
|
tokenStoreCache.deleteUser(accessToken);
|
||||||
|
|
||||||
|
return Result.ok();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package net.maku.monitor.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线用户
|
||||||
|
*
|
||||||
|
* @author 阿沐 babamu@126.com
|
||||||
|
* <a href="https://maku.net">MAKU</a>
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "在线用户")
|
||||||
|
public class UserOnlineVO {
|
||||||
|
@Schema(description = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "用户名")
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
@Schema(description = "姓名")
|
||||||
|
private String realName;
|
||||||
|
|
||||||
|
@Schema(description = "性别")
|
||||||
|
private Integer gender;
|
||||||
|
|
||||||
|
@Schema(description = "邮箱")
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
@Schema(description = "accessToken")
|
||||||
|
private String accessToken;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user