chore: 客户端管理 => 终端管理

This commit is contained in:
2025-02-26 21:27:28 +08:00
parent d3369119e0
commit 82cf4390e8
21 changed files with 87 additions and 87 deletions

View File

@@ -81,12 +81,12 @@ public class UserContext implements Serializable {
private Set<RoleContext> roles;
/**
* 客户端类型
* 端类型
*/
private String clientType;
/**
* 客户端 ID
* 端 ID
*/
private String clientId;

View File

@@ -84,7 +84,7 @@ public abstract class AbstractLoginHandler<T extends LoginReq> implements LoginH
* 认证
*
* @param user 用户信息
* @param client 客户端信息
* @param client 端信息
* @return token 令牌信息
*/
protected String authenticate(UserDO user, ClientResp client) {

View File

@@ -35,7 +35,7 @@ public interface LoginHandler<T extends LoginReq> {
* 登录
*
* @param req 登录请求参数
* @param client 客户端信息
* @param client 端信息
* @param request 请求对象
* @return 登录响应参数
*/
@@ -45,7 +45,7 @@ public interface LoginHandler<T extends LoginReq> {
* 登录前置处理
*
* @param req 登录请求参数
* @param client 客户端信息
* @param client 端信息
* @param request 请求对象
*/
void preLogin(T req, ClientResp client, HttpServletRequest request);
@@ -54,7 +54,7 @@ public interface LoginHandler<T extends LoginReq> {
* 登录后置处理
*
* @param req 登录请求参数
* @param client 客户端信息
* @param client 端信息
* @param request 请求对象
*/
void postLogin(T req, ClientResp client, HttpServletRequest request);

View File

@@ -46,9 +46,9 @@ public class OnlineUserQuery implements Serializable {
private String nickname;
/**
* 客户端 ID
* 端 ID
*/
@Schema(description = "客户端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
@Schema(description = "端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
private String clientId;
/**

View File

@@ -47,10 +47,10 @@ public class LoginReq implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 客户端 ID
* 端 ID
*/
@Schema(description = "客户端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
@NotBlank(message = "客户端ID不能为空")
@Schema(description = "端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
@NotBlank(message = "端ID不能为空")
private String clientId;
/**

View File

@@ -69,15 +69,15 @@ public class OnlineUserResp implements Serializable {
private String nickname;
/**
* 客户端类型
* 端类型
*/
@Schema(description = "客户端类型", example = "PC")
@Schema(description = "端类型", example = "PC")
private String clientType;
/**
* 客户端 ID
* 端 ID
*/
@Schema(description = "客户端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
@Schema(description = "端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
private String clientId;
/**

View File

@@ -67,11 +67,11 @@ public class AuthServiceImpl implements AuthService {
@Override
public LoginResp login(LoginReq req, HttpServletRequest request) {
AuthTypeEnum authType = req.getAuthType();
// 校验客户
// 校验
ClientResp client = clientService.getByClientId(req.getClientId());
ValidationUtils.throwIfNull(client, "客户端不存在");
ValidationUtils.throwIf(DisEnableStatusEnum.DISABLE.equals(client.getStatus()), "客户端已禁用");
ValidationUtils.throwIf(!client.getAuthType().contains(authType.getValue()), "客户端暂未授权 [{}] 认证", authType
ValidationUtils.throwIfNull(client, "端不存在");
ValidationUtils.throwIf(DisEnableStatusEnum.DISABLE.equals(client.getStatus()), "端已禁用");
ValidationUtils.throwIf(!client.getAuthType().contains(authType.getValue()), "端暂未授权 [{}] 认证", authType
.getDescription());
// 获取处理器
LoginHandler<LoginReq> loginHandler = loginHandlerFactory.getHandler(authType);

View File

@@ -124,11 +124,11 @@ public class OnlineUserServiceImpl implements OnlineUserService {
}
/**
* 是否匹配客户端 ID
* 是否匹配端 ID
*
* @param clientId 客户端 ID
* @param clientId 端 ID
* @param userContext 用户上下文信息
* @return 是否匹配客户端 ID
* @return 是否匹配端 ID
*/
private boolean isMatchClientId(String clientId, UserContext userContext) {
if (StrUtil.isBlank(clientId)) {

View File

@@ -20,7 +20,7 @@ import top.continew.admin.system.model.entity.ClientDO;
import top.continew.starter.data.mp.base.BaseMapper;
/**
* 客户端 Mapper
* 端 Mapper
*
* @author KAI
* @since 2024/12/03 16:04

View File

@@ -27,7 +27,7 @@ import java.io.Serial;
import java.util.List;
/**
* 客户端实体
* 端实体
*
* @author KAI
* @author Charles7c
@@ -41,17 +41,17 @@ public class ClientDO extends BaseDO {
private static final long serialVersionUID = 1L;
/**
* 客户端 ID
* 端 ID
*/
private String clientId;
/**
* 客户端 Key
* 端 Key
*/
private String clientKey;
/**
* 客户端秘钥
* 端秘钥
*/
private String clientSecret;
@@ -62,7 +62,7 @@ public class ClientDO extends BaseDO {
private List<String> authType;
/**
* 客户端类型
* 端类型
*/
private String clientType;

View File

@@ -27,29 +27,29 @@ import java.io.Serializable;
import java.util.List;
/**
* 客户端查询条件
* 端查询条件
*
* @author KAI
* @author Charles7c
* @since 2024/12/03 16:04
*/
@Data
@Schema(description = "客户端查询条件")
@Schema(description = "端查询条件")
public class ClientQuery implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 客户端 Key
* 端 Key
*/
@Schema(description = "客户端 Key", example = "PC")
@Schema(description = "端 Key", example = "PC")
private String clientKey;
/**
* 客户端秘钥
* 端秘钥
*/
@Schema(description = "客户端秘钥", example = "dd77ab1e353a027e0d60ce3b151e8642")
@Schema(description = "端秘钥", example = "dd77ab1e353a027e0d60ce3b151e8642")
private String clientSecret;
/**
@@ -60,9 +60,9 @@ public class ClientQuery implements Serializable {
private List<String> authType;
/**
* 客户端类型
* 端类型
*/
@Schema(description = "客户端类型", example = "PC")
@Schema(description = "端类型", example = "PC")
private String clientType;
/**

View File

@@ -28,33 +28,33 @@ import java.io.Serializable;
import java.util.List;
/**
* 创建或修改客户端参数
* 创建或修改端参数
*
* @author KAI
* @author Charles7c
* @since 2024/12/03 16:04
*/
@Data
@Schema(description = "创建或修改客户端参数")
@Schema(description = "创建或修改端参数")
public class ClientReq implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 客户端 Key
* 端 Key
*/
@Schema(description = "客户端 Key", example = "PC")
@NotBlank(message = "客户端Key不能为空")
@Length(max = 32, message = "客户端Key长度不能超过 {max} 个字符")
@Schema(description = "端 Key", example = "PC")
@NotBlank(message = "端Key不能为空")
@Length(max = 32, message = "端Key长度不能超过 {max} 个字符")
private String clientKey;
/**
* 客户端秘钥
* 端秘钥
*/
@Schema(description = "客户端秘钥", example = "dd77ab1e353a027e0d60ce3b151e8642")
@NotBlank(message = "客户端秘钥不能为空")
@Length(max = 255, message = "客户端秘钥长度不能超过 {max} 个字符")
@Schema(description = "端秘钥", example = "dd77ab1e353a027e0d60ce3b151e8642")
@NotBlank(message = "端秘钥不能为空")
@Length(max = 255, message = "端秘钥长度不能超过 {max} 个字符")
private String clientSecret;
/**
@@ -65,11 +65,11 @@ public class ClientReq implements Serializable {
private List<String> authType;
/**
* 客户端类型
* 端类型
*/
@Schema(description = "客户端类型", example = "PC")
@NotBlank(message = "客户端类型不能为空")
@Length(max = 32, message = "客户端类型长度不能超过 {max} 个字符")
@Schema(description = "端类型", example = "PC")
@NotBlank(message = "端类型不能为空")
@Length(max = 32, message = "端类型长度不能超过 {max} 个字符")
private String clientType;
/**
@@ -91,7 +91,7 @@ public class ClientReq implements Serializable {
private DisEnableStatusEnum status;
/**
* 客户端 ID
* 端 ID
*/
@Schema(hidden = true)
private String clientId;

View File

@@ -25,35 +25,35 @@ import java.io.Serial;
import java.util.List;
/**
* 客户端信息
* 端信息
*
* @author KAI
* @author Charles7c
* @since 2024/12/03 16:04
*/
@Data
@Schema(description = "客户端信息")
@Schema(description = "端信息")
public class ClientResp extends BaseDetailResp {
@Serial
private static final long serialVersionUID = 1L;
/**
* 客户端 ID
* 端 ID
*/
@Schema(description = "客户端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
@Schema(description = "端 ID", example = "ef51c9a3e9046c4f2ea45142c8a8344a")
private String clientId;
/**
* 客户端 Key
* 端 Key
*/
@Schema(description = "客户端 Key", example = "PC")
@Schema(description = "端 Key", example = "PC")
private String clientKey;
/**
* 客户端秘钥
* 端秘钥
*/
@Schema(description = "客户端秘钥", example = "dd77ab1e353a027e0d60ce3b151e8642")
@Schema(description = "端秘钥", example = "dd77ab1e353a027e0d60ce3b151e8642")
private String clientSecret;
/**
@@ -63,9 +63,9 @@ public class ClientResp extends BaseDetailResp {
private List<String> authType;
/**
* 客户端类型
* 端类型
*/
@Schema(description = "客户端类型", example = "PC")
@Schema(description = "端类型", example = "PC")
private String clientType;
/**

View File

@@ -22,7 +22,7 @@ import top.continew.admin.system.model.resp.ClientResp;
import top.continew.starter.extension.crud.service.BaseService;
/**
* 客户端业务接口
* 端业务接口
*
* @author KAI
* @author Charles7c
@@ -31,10 +31,10 @@ import top.continew.starter.extension.crud.service.BaseService;
public interface ClientService extends BaseService<ClientResp, ClientResp, ClientQuery, ClientReq> {
/**
* 根据客户端 ID 查詢
* 根据端 ID 查詢
*
* @param clientId 客戶端 ID
* @return 客户端信息
* @param clientId 端 ID
* @return 端信息
*/
ClientResp getByClientId(String clientId);
}

View File

@@ -35,7 +35,7 @@ import top.continew.starter.extension.crud.service.BaseServiceImpl;
import java.util.List;
/**
* 客户端业务实现
* 端业务实现
*
* @author KAI
* @author Charles7c
@@ -60,7 +60,7 @@ public class ClientServiceImpl extends BaseServiceImpl<ClientMapper, ClientDO, C
for (Long id : ids) {
ClientDO client = this.getById(id);
query.setClientId(client.getClientId());
CheckUtils.throwIfNotEmpty(onlineUserService.list(query), "客户端 [{}] 还存在在线用户,不能删除", client.getClientKey());
CheckUtils.throwIfNotEmpty(onlineUserService.list(query), "端 [{}] 还存在在线用户,不能删除", client.getClientKey());
}
}

View File

@@ -101,7 +101,7 @@ public class DemoEnvironmentJob {
Long appCount = appMapper.lambdaQuery().gt(AppDO::getId, DELETE_FLAG).count();
this.log(appCount, "应用");
Long clientCount = clientsMapper.lambdaQuery().gt(ClientDO::getId, DELETE_FLAG).count();
this.log(clientCount, "客户");
this.log(clientCount, "");
// 清理数据
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().blockAttack(true).build());
SnailJobLog.REMOTE.info("演示环境待清理数据项检测完成,开始执行清理。");
@@ -136,7 +136,7 @@ public class DemoEnvironmentJob {
.remove());
this.clean(deptCount, "部门", null, () -> deptMapper.lambdaUpdate().gt(DeptDO::getId, DEPT_FLAG).remove());
this.clean(appCount, "应用", null, () -> appMapper.lambdaUpdate().gt(AppDO::getId, DEPT_FLAG).remove());
this.clean(clientCount, "客户", null, () -> clientsMapper.lambdaUpdate()
this.clean(clientCount, "", null, () -> clientsMapper.lambdaUpdate()
.gt(ClientDO::getId, DEPT_FLAG)
.remove());
SnailJobLog.REMOTE.info("演示环境数据已清理完成。");

View File

@@ -27,12 +27,12 @@ import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import top.continew.starter.extension.crud.enums.Api;
/**
* 客户端管理 API
* 端管理 API
*
* @author KAI
* @since 2024/12/03 16:04
*/
@Tag(name = "客户端管理 API")
@Tag(name = "端管理 API")
@RestController
@CrudRequestMapping(value = "/system/client", api = {Api.PAGE, Api.DETAIL, Api.ADD, Api.UPDATE, Api.DELETE})
public class ClientController extends BaseController<ClientService, ClientResp, ClientResp, ClientQuery, ClientReq> {

View File

@@ -78,7 +78,7 @@ VALUES
(1114, '修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 4, 1, 1, NOW()),
(1115, '删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 5, 1, 1, NOW()),
( 1180, '客户端管理', 1000, 2, '/system/client', 'SystemClient', 'system/client/index', NULL, 'mobile', b'0', b'0', b'0', NULL, 9, 1, 1, NOW()),
( 1180, '端管理', 1000, 2, '/system/client', 'SystemClient', 'system/client/index', NULL, 'mobile', b'0', b'0', b'0', NULL, 9, 1, 1, NOW()),
(1181, '列表', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:list', 1, 1, 1, NOW()),
(1182, '详情', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:detail', 2, 1, 1, NOW()),
(1183, '新增', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:add', 3, 1, 1, NOW()),
@@ -190,7 +190,7 @@ INSERT INTO `sys_dict`
VALUES
(1, '公告类型', 'notice_type', NULL, b'1', 1, NOW()),
(2, '消息类型', 'message_type', NULL, b'1', 1, NOW()),
(3, '客户端类型', 'client_type', NULL, b'1', 1, NOW());
(3, '端类型', 'client_type', NULL, b'1', 1, NOW());
INSERT INTO `sys_dict_item`
(`id`, `label`, `value`, `color`, `sort`, `description`, `status`, `dict_id`, `create_user`, `create_time`)
@@ -247,7 +247,7 @@ VALUES
(1, '开发环境', 'local_dev', 2, NULL, NULL, NULL, 'C:/continew-admin/data/file/', 'http://localhost:8000/file', '本地存储', b'1', 1, 1, 1, NOW()),
(2, '生产环境', 'local_prod', 2, NULL, NULL, NULL, '../data/file/', 'http://api.continew.top/file', '本地存储', b'0', 2, 2, 1, NOW());
-- 初始化客户端数据
-- 初始化端数据
INSERT INTO `sys_client`
(`id`, `client_id`, `client_key`, `client_secret`, `auth_type`, `client_type`, `active_timeout`, `timeout`, `status`, `create_user`, `create_time`)
VALUES

View File

@@ -299,11 +299,11 @@ CREATE TABLE IF NOT EXISTS `sys_file` (
CREATE TABLE IF NOT EXISTS `sys_client` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`client_id` varchar(50) NOT NULL COMMENT '客户端ID',
`client_key` varchar(255) NOT NULL COMMENT '客户端Key',
`client_secret` varchar(255) NOT NULL COMMENT '客户端秘钥',
`client_id` varchar(50) NOT NULL COMMENT '端ID',
`client_key` varchar(255) NOT NULL COMMENT '端Key',
`client_secret` varchar(255) NOT NULL COMMENT '端秘钥',
`auth_type` json NOT NULL COMMENT '认证类型',
`client_type` varchar(50) NOT NULL COMMENT '客户端类型',
`client_type` varchar(50) NOT NULL COMMENT '端类型',
`active_timeout` bigint(20) DEFAULT -1 COMMENT 'Token最低活跃频率单位-1不限制永不冻结',
`timeout` bigint(20) DEFAULT 2592000 COMMENT 'Token有效期单位-1永不过期',
`status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态1启用2禁用',
@@ -313,4 +313,4 @@ CREATE TABLE IF NOT EXISTS `sys_client` (
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_client_id`(`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户端表';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='端表';

View File

@@ -78,7 +78,7 @@ VALUES
(1114, '修改', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:update', 4, 1, 1, NOW()),
(1115, '删除', 1110, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:storage:delete', 5, 1, 1, NOW()),
( 1180, '客户端管理', 1000, 2, '/system/client', 'SystemClient', 'system/client/index', NULL, 'mobile', false, false, false, NULL, 9, 1, 1, NOW()),
( 1180, '端管理', 1000, 2, '/system/client', 'SystemClient', 'system/client/index', NULL, 'mobile', false, false, false, NULL, 9, 1, 1, NOW()),
(1181, '列表', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:list', 1, 1, 1, NOW()),
(1182, '详情', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:detail', 2, 1, 1, NOW()),
(1183, '新增', 1180, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'system:client:add', 3, 1, 1, NOW()),
@@ -190,7 +190,7 @@ INSERT INTO "sys_dict"
VALUES
(1, '公告类型', 'notice_type', NULL, true, 1, NOW()),
(2, '消息类型', 'message_type', NULL, true, 1, NOW()),
(3, '客户端类型', 'client_type', NULL, true, 1, NOW());
(3, '端类型', 'client_type', NULL, true, 1, NOW());
INSERT INTO "sys_dict_item"
("id", "label", "value", "color", "sort", "description", "status", "dict_id", "create_user", "create_time")
@@ -247,7 +247,7 @@ VALUES
(1, '开发环境', 'local_dev', 2, NULL, NULL, NULL, 'C:/continew-admin/data/file/', 'http://localhost:8000/file', '本地存储', true, 1, 1, 1, NOW()),
(2, '生产环境', 'local_prod', 2, NULL, NULL, NULL, '../data/file/', 'http://api.continew.top/file', '本地存储', false, 2, 2, 1, NOW());
-- 初始化客户端数据
-- 初始化端数据
INSERT INTO "sys_client"
("id", "client_id", "client_key", "client_secret", "auth_type", "client_type", "active_timeout", "timeout", "status", "create_user", "create_time")
VALUES

View File

@@ -515,11 +515,11 @@ CREATE TABLE IF NOT EXISTS "sys_client" (
);
CREATE UNIQUE INDEX "uk_client_client_id" ON "sys_client" ("client_id");
COMMENT ON COLUMN "sys_client"."id" IS 'ID';
COMMENT ON COLUMN "sys_client"."client_id" IS '客户端ID';
COMMENT ON COLUMN "sys_client"."client_key" IS '客户端Key';
COMMENT ON COLUMN "sys_client"."client_secret" IS '客户端秘钥';
COMMENT ON COLUMN "sys_client"."client_id" IS '端ID';
COMMENT ON COLUMN "sys_client"."client_key" IS '端Key';
COMMENT ON COLUMN "sys_client"."client_secret" IS '端秘钥';
COMMENT ON COLUMN "sys_client"."auth_type" IS '认证类型';
COMMENT ON COLUMN "sys_client"."client_type" IS '客户端类型';
COMMENT ON COLUMN "sys_client"."client_type" IS '端类型';
COMMENT ON COLUMN "sys_client"."active_timeout" IS 'Token最低活跃频率单位-1不限制永不冻结';
COMMENT ON COLUMN "sys_client"."timeout" IS 'Token有效期单位-1永不过期';
COMMENT ON COLUMN "sys_client"."status" IS '状态1启用2禁用';
@@ -527,4 +527,4 @@ COMMENT ON COLUMN "sys_client"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_client"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_client"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_client"."update_time" IS '修改时间';
COMMENT ON TABLE "sys_client" IS '客户端表';
COMMENT ON TABLE "sys_client" IS '端表';