add
This commit is contained in:
@ -1,17 +1,17 @@
|
|||||||
/*
|
/*
|
||||||
Navicat Premium Data Transfer
|
Navicat Premium Data Transfer
|
||||||
|
|
||||||
Source Server : 嘉策线上
|
Source Server : 本地Mysql
|
||||||
Source Server Type : MySQL
|
Source Server Type : MySQL
|
||||||
Source Server Version : 50735
|
Source Server Version : 80032
|
||||||
Source Host : 121.5.136.69:3306
|
Source Host : localhost:3306
|
||||||
Source Schema : qiaoba-boot
|
Source Schema : qiaoba-boot
|
||||||
|
|
||||||
Target Server Type : MySQL
|
Target Server Type : MySQL
|
||||||
Target Server Version : 50735
|
Target Server Version : 80032
|
||||||
File Encoding : 65001
|
File Encoding : 65001
|
||||||
|
|
||||||
Date: 24/05/2023 21:33:23
|
Date: 25/05/2023 17:48:47
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
@ -22,52 +22,52 @@ SET FOREIGN_KEY_CHECKS = 0;
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_config`;
|
DROP TABLE IF EXISTS `sys_config`;
|
||||||
CREATE TABLE `sys_config` (
|
CREATE TABLE `sys_config` (
|
||||||
`config_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '参数主键',
|
`config_id` bigint NOT NULL AUTO_INCREMENT COMMENT '参数主键',
|
||||||
`config_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数名称',
|
`config_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '参数名称',
|
||||||
`config_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键名',
|
`config_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '参数键名',
|
||||||
`config_value` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键值',
|
`config_value` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '参数键值',
|
||||||
`config_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
|
`config_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
|
||||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
`tenant_id` bigint(20) NULL DEFAULT NULL,
|
`tenant_id` bigint NULL DEFAULT NULL,
|
||||||
PRIMARY KEY (`config_id`) USING BTREE
|
PRIMARY KEY (`config_id`) USING BTREE
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1661363988810563586 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB AUTO_INCREMENT = 1661363988810563586 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_config
|
-- Records of sys_config
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
INSERT INTO `sys_config` VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', 1);
|
INSERT INTO `sys_config` VALUES (1661598740507910145, 'Token有效期', 'sys.token.expireTime', '96', 'Y', 'admin', '2023-05-25 13:22:50', 'admin', '2023-05-25 15:02:42', '单位:小时,仅支持正整数', 1);
|
||||||
INSERT INTO `sys_config` VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '初始化密码 123456', 1);
|
INSERT INTO `sys_config` VALUES (1661602101802164225, '账号黑名单开关', 'sys.account.blacklistOnOff', 'true', 'Y', 'admin', '2023-05-25 13:22:31', 'admin', '2023-05-25 13:57:14', '(true开启,false关闭)', 1);
|
||||||
INSERT INTO `sys_config` VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '深色主题theme-dark,浅色主题theme-light', 1);
|
INSERT INTO `sys_config` VALUES (1661603407233077249, '账号注册开关', 'sys.account.registerUser', 'false', 'Y', 'admin', '2023-05-25 13:21:38', 'admin', '2023-05-25 15:07:00', '(true开启,false关闭)', 1);
|
||||||
INSERT INTO `sys_config` VALUES (4, '账号自助-验证码开关', 'sys.account.captchaOnOff', 'false', 'Y', 'admin', '2022-08-15 18:01:28', '', '2022-10-28 15:45:36', '是否开启验证码功能(true开启,false关闭)', 1);
|
INSERT INTO `sys_config` VALUES (1661603968779079681, '登录验证码开关', 'sys.account.captchaOnOff', 'false', 'Y', 'admin', '2023-05-25 13:23:52', 'admin', '2023-05-25 15:06:56', '(true开启,false关闭)', 1);
|
||||||
INSERT INTO `sys_config` VALUES (5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', '2022-08-15 18:01:28', '', '2022-09-28 14:15:30', '是否开启注册用户功能(true开启,false关闭)', 1);
|
INSERT INTO `sys_config` VALUES (1661603968779079682, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-light', 'Y', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-25 13:26:27', '深色主题theme-dark,浅色主题theme-light', 1);
|
||||||
INSERT INTO `sys_config` VALUES (6, '账号自助-黑名单开关', 'sys.account.blacklistOnOff', 'true', 'Y', 'admin', '2022-09-20 11:53:11', '', '2022-09-20 11:53:30', '是否开启注册黑名单功能(true开启,false关闭)', 1);
|
INSERT INTO `sys_config` VALUES (1661603968779079683, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', 1);
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for sys_dept
|
-- Table structure for sys_dept
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_dept`;
|
DROP TABLE IF EXISTS `sys_dept`;
|
||||||
CREATE TABLE `sys_dept` (
|
CREATE TABLE `sys_dept` (
|
||||||
`dept_id` bigint(20) NOT NULL COMMENT '部门id',
|
`dept_id` bigint NOT NULL COMMENT '部门id',
|
||||||
`parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父部门id',
|
`parent_id` bigint NULL DEFAULT 0 COMMENT '父部门id',
|
||||||
`ancestors` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '祖级列表',
|
`ancestors` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '祖级列表',
|
||||||
`dept_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '部门名称',
|
`dept_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '部门名称',
|
||||||
`order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序',
|
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
|
||||||
`leader` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '负责人ID',
|
`leader` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '负责人ID',
|
||||||
`phone` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',
|
`phone` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '手机号',
|
||||||
`email` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
|
`email` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '邮箱',
|
||||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '部门状态(1正常 0停用)',
|
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '部门状态(1正常 0停用)',
|
||||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`dept_id`) USING BTREE
|
PRIMARY KEY (`dept_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_dept
|
-- Records of sys_dept
|
||||||
@ -78,7 +78,7 @@ INSERT INTO `sys_dept` VALUES (1659443064624918529, 1659442897402212353, '0,1659
|
|||||||
INSERT INTO `sys_dept` VALUES (1659443154873757697, 1659443006122766337, '0,1659442897402212353,1659443006122766337', '合肥分公司', 1, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:34', '', NULL, NULL, 1);
|
INSERT INTO `sys_dept` VALUES (1659443154873757697, 1659443006122766337, '0,1659442897402212353,1659443006122766337', '合肥分公司', 1, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:34', '', NULL, NULL, 1);
|
||||||
INSERT INTO `sys_dept` VALUES (1659443184389074946, 1659443006122766337, '0,1659442897402212353,1659443006122766337', '芜湖分公司', 2, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:41', '', NULL, NULL, 1);
|
INSERT INTO `sys_dept` VALUES (1659443184389074946, 1659443006122766337, '0,1659442897402212353,1659443006122766337', '芜湖分公司', 2, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:41', '', NULL, NULL, 1);
|
||||||
INSERT INTO `sys_dept` VALUES (1659443224335626242, 1659443064624918529, '0,1659442897402212353,1659443064624918529', '南京分公司', 1, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:50', '', NULL, NULL, 1);
|
INSERT INTO `sys_dept` VALUES (1659443224335626242, 1659443064624918529, '0,1659442897402212353,1659443064624918529', '南京分公司', 1, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:50', '', NULL, NULL, 1);
|
||||||
INSERT INTO `sys_dept` VALUES (1659443256656932865, 1659443064624918529, '0,1659442897402212353,1659443064624918529', '苏州分公司', 2, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:58', '', NULL, NULL, 1);
|
INSERT INTO `sys_dept` VALUES (1659443256656932865, 1659443064624918529, '0,1659442897402212353,1659443064624918529', '苏州分公司', 2, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:17:58', 'admin', '2023-05-25 13:31:01', NULL, 1);
|
||||||
INSERT INTO `sys_dept` VALUES (1659443329390358529, 1659443006122766337, '0,1659442897402212353,1659443006122766337', '安庆分公司', 3, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:18:15', 'admin', '2023-05-19 14:39:34', NULL, 1);
|
INSERT INTO `sys_dept` VALUES (1659443329390358529, 1659443006122766337, '0,1659442897402212353,1659443006122766337', '安庆分公司', 3, NULL, NULL, NULL, '1', 'admin', '2023-05-19 14:18:15', 'admin', '2023-05-19 14:39:34', NULL, 1);
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
@ -86,15 +86,15 @@ INSERT INTO `sys_dept` VALUES (1659443329390358529, 1659443006122766337, '0,1659
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_menu`;
|
DROP TABLE IF EXISTS `sys_menu`;
|
||||||
CREATE TABLE `sys_menu` (
|
CREATE TABLE `sys_menu` (
|
||||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
`menu_id` bigint NOT NULL COMMENT '菜单ID',
|
||||||
`menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称',
|
`menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称',
|
||||||
`parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父菜单ID',
|
`parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID',
|
||||||
`order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序',
|
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
|
||||||
`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址',
|
`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址',
|
||||||
`component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径',
|
`component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径',
|
||||||
`query` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数',
|
`query` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数',
|
||||||
`is_frame` int(11) NULL DEFAULT 1 COMMENT '是否为外链(1是 0否)',
|
`is_frame` int NULL DEFAULT 1 COMMENT '是否为外链(1是 0否)',
|
||||||
`is_cache` int(11) NULL DEFAULT 0 COMMENT '是否缓存(1缓存 0不缓存)',
|
`is_cache` int NULL DEFAULT 0 COMMENT '是否缓存(1缓存 0不缓存)',
|
||||||
`menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
|
`menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
|
||||||
`is_visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(1显示 0隐藏)',
|
`is_visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(1显示 0隐藏)',
|
||||||
`perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识',
|
`perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识',
|
||||||
@ -104,7 +104,7 @@ CREATE TABLE `sys_menu` (
|
|||||||
`update_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
`update_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
|
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
|
||||||
`tenant_id` bigint(20) NULL DEFAULT NULL,
|
`tenant_id` bigint NULL DEFAULT NULL,
|
||||||
PRIMARY KEY (`menu_id`) USING BTREE
|
PRIMARY KEY (`menu_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
@ -153,19 +153,19 @@ INSERT INTO `sys_menu` VALUES (1033, '参数删除', 106, 4, '#', '', '', 1, 0,
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_post`;
|
DROP TABLE IF EXISTS `sys_post`;
|
||||||
CREATE TABLE `sys_post` (
|
CREATE TABLE `sys_post` (
|
||||||
`post_id` bigint(20) NOT NULL COMMENT '岗位ID',
|
`post_id` bigint NOT NULL COMMENT '岗位ID',
|
||||||
`post_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位编码',
|
`post_code` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '岗位编码',
|
||||||
`post_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位名称',
|
`post_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '岗位名称',
|
||||||
`post_sort` int(11) NOT NULL COMMENT '显示顺序',
|
`post_sort` int NOT NULL COMMENT '显示顺序',
|
||||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '状态(1正常 0停用)',
|
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '状态(1正常 0停用)',
|
||||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`post_id`) USING BTREE
|
PRIMARY KEY (`post_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_post
|
-- Records of sys_post
|
||||||
@ -180,10 +180,10 @@ INSERT INTO `sys_post` VALUES (1659440712018833410, 'acct', '会计', 4, '1', 'a
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_role`;
|
DROP TABLE IF EXISTS `sys_role`;
|
||||||
CREATE TABLE `sys_role` (
|
CREATE TABLE `sys_role` (
|
||||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||||
`role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',
|
`role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',
|
||||||
`role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限字符串',
|
`role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限字符串',
|
||||||
`role_sort` int(11) NOT NULL COMMENT '显示顺序',
|
`role_sort` int NOT NULL COMMENT '显示顺序',
|
||||||
`data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
`data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
||||||
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(1正常 0停用)',
|
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(1正常 0停用)',
|
||||||
`create_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
|
`create_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||||
@ -191,7 +191,7 @@ CREATE TABLE `sys_role` (
|
|||||||
`update_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
`update_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`role_id`) USING BTREE
|
PRIMARY KEY (`role_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
@ -206,11 +206,11 @@ INSERT INTO `sys_role` VALUES (1660535591067213826, '测试', 'test', 1, '1', '1
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_role_dept`;
|
DROP TABLE IF EXISTS `sys_role_dept`;
|
||||||
CREATE TABLE `sys_role_dept` (
|
CREATE TABLE `sys_role_dept` (
|
||||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||||
`dept_id` bigint(20) NOT NULL COMMENT '部门ID',
|
`dept_id` bigint NOT NULL COMMENT '部门ID',
|
||||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`role_id`, `dept_id`, `tenant_id`) USING BTREE
|
PRIMARY KEY (`role_id`, `dept_id`, `tenant_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_role_dept
|
-- Records of sys_role_dept
|
||||||
@ -221,11 +221,11 @@ CREATE TABLE `sys_role_dept` (
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_role_menu`;
|
DROP TABLE IF EXISTS `sys_role_menu`;
|
||||||
CREATE TABLE `sys_role_menu` (
|
CREATE TABLE `sys_role_menu` (
|
||||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
`menu_id` bigint NOT NULL COMMENT '菜单ID',
|
||||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`role_id`, `menu_id`, `tenant_id`) USING BTREE
|
PRIMARY KEY (`role_id`, `menu_id`, `tenant_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_role_menu
|
-- Records of sys_role_menu
|
||||||
@ -272,8 +272,8 @@ INSERT INTO `sys_role_menu` VALUES (1, 1033, 1);
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_user`;
|
DROP TABLE IF EXISTS `sys_user`;
|
||||||
CREATE TABLE `sys_user` (
|
CREATE TABLE `sys_user` (
|
||||||
`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
||||||
`dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID',
|
`dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID',
|
||||||
`username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号',
|
`username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号',
|
||||||
`nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称',
|
`nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称',
|
||||||
`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
|
`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
|
||||||
@ -289,7 +289,7 @@ CREATE TABLE `sys_user` (
|
|||||||
`update_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
`update_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`user_id`) USING BTREE
|
PRIMARY KEY (`user_id`) USING BTREE
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1660830718629277698 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB AUTO_INCREMENT = 1660830718629277698 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
@ -304,11 +304,11 @@ INSERT INTO `sys_user` VALUES (1660830718629277697, 1659443256656932865, 'admin1
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_user_post`;
|
DROP TABLE IF EXISTS `sys_user_post`;
|
||||||
CREATE TABLE `sys_user_post` (
|
CREATE TABLE `sys_user_post` (
|
||||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||||
`post_id` bigint(20) NOT NULL COMMENT '岗位ID',
|
`post_id` bigint NOT NULL COMMENT '岗位ID',
|
||||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`user_id`, `post_id`, `tenant_id`) USING BTREE
|
PRIMARY KEY (`user_id`, `post_id`, `tenant_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_user_post
|
-- Records of sys_user_post
|
||||||
@ -322,11 +322,11 @@ INSERT INTO `sys_user_post` VALUES (1660830718629277697, 1659440467696431105, 1)
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
DROP TABLE IF EXISTS `sys_user_role`;
|
DROP TABLE IF EXISTS `sys_user_role`;
|
||||||
CREATE TABLE `sys_user_role` (
|
CREATE TABLE `sys_user_role` (
|
||||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||||
PRIMARY KEY (`user_id`, `role_id`, `tenant_id`) USING BTREE
|
PRIMARY KEY (`user_id`, `role_id`, `tenant_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of sys_user_role
|
-- Records of sys_user_role
|
||||||
|
9
pom.xml
9
pom.xml
@ -51,6 +51,8 @@
|
|||||||
<springdoc.version>1.6.14</springdoc.version>
|
<springdoc.version>1.6.14</springdoc.version>
|
||||||
<!-- 数据校验 -->
|
<!-- 数据校验 -->
|
||||||
<jakarta.version>3.0.2</jakarta.version>
|
<jakarta.version>3.0.2</jakarta.version>
|
||||||
|
<!-- ip离线库 -->
|
||||||
|
<ip2region.version>2.7.0</ip2region.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
@ -103,7 +105,12 @@
|
|||||||
<artifactId>jakarta.validation-api</artifactId>
|
<artifactId>jakarta.validation-api</artifactId>
|
||||||
<version>${jakarta.version}</version>
|
<version>${jakarta.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- ip离线库 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.lionsoul</groupId>
|
||||||
|
<artifactId>ip2region</artifactId>
|
||||||
|
<version>${ip2region.version}</version>
|
||||||
|
</dependency>
|
||||||
<!-- ======================== system module ======================== -->
|
<!-- ======================== system module ======================== -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.qiaoba</groupId>
|
<groupId>com.qiaoba</groupId>
|
||||||
|
@ -47,10 +47,15 @@ public class SpringSecurityConfig {
|
|||||||
private final LogoutHandler logoutHandler;
|
private final LogoutHandler logoutHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建Token秘钥
|
* 创建Token秘钥和Token有效期
|
||||||
*/
|
*/
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void initSecret() {
|
public void init() {
|
||||||
|
|
||||||
|
if (redisService.hasKey(SecurityConstant.TOKEN_EXPIRE_TIME_KEY)) {
|
||||||
|
TokenUtil.expireTime = Integer.parseInt(redisService.get(SecurityConstant.TOKEN_EXPIRE_TIME_KEY).toString());
|
||||||
|
}
|
||||||
|
|
||||||
if (redisService.hasKey(SecurityConstant.REDIS_SECRET_KEY)) {
|
if (redisService.hasKey(SecurityConstant.REDIS_SECRET_KEY)) {
|
||||||
TokenUtil.secret = SecureUtil.md5(SecureUtil.md5(redisService.get(SecurityConstant.REDIS_SECRET_KEY).toString()));
|
TokenUtil.secret = SecureUtil.md5(SecureUtil.md5(redisService.get(SecurityConstant.REDIS_SECRET_KEY).toString()));
|
||||||
} else {
|
} else {
|
||||||
|
@ -30,6 +30,7 @@ public class SecurityConstant {
|
|||||||
public static final String REGISTER_ON = "true";
|
public static final String REGISTER_ON = "true";
|
||||||
public static final String REDIS_SECRET_KEY = "sys:secret:secret";
|
public static final String REDIS_SECRET_KEY = "sys:secret:secret";
|
||||||
public static final String USER_DETAILS_REDIS_KEY = "user_details:";
|
public static final String USER_DETAILS_REDIS_KEY = "user_details:";
|
||||||
|
public static final String ONLINE_USER_REDIS_KEY = "online_user:";
|
||||||
public static final String TOKEN_EXPIRE_TIME_KEY = ConfigConstant.SYS_CONFIG_KEY_PREFIX + "sys.token.expireTime";
|
public static final String TOKEN_EXPIRE_TIME_KEY = ConfigConstant.SYS_CONFIG_KEY_PREFIX + "sys.token.expireTime";
|
||||||
/**
|
/**
|
||||||
* 登录成功
|
* 登录成功
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.qiaoba.auth.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线用户
|
||||||
|
*
|
||||||
|
* @author ailanyin
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2023/5/25 17:05
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OnlineUser implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录账号
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户名称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录IP地址
|
||||||
|
*/
|
||||||
|
private String ip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录地点
|
||||||
|
*/
|
||||||
|
private String address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 浏览器类型
|
||||||
|
*/
|
||||||
|
private String browser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作系统
|
||||||
|
*/
|
||||||
|
private String os;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录时间
|
||||||
|
*/
|
||||||
|
private Date loginTime;
|
||||||
|
}
|
@ -2,7 +2,10 @@ package com.qiaoba.auth.filters;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.qiaoba.auth.constants.SecurityConstant;
|
import com.qiaoba.auth.constants.SecurityConstant;
|
||||||
|
import com.qiaoba.auth.entity.OnlineUser;
|
||||||
|
import com.qiaoba.auth.service.OnlineUserService;
|
||||||
import com.qiaoba.auth.utils.TokenUtil;
|
import com.qiaoba.auth.utils.TokenUtil;
|
||||||
|
import com.qiaoba.common.web.utils.ResponseUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
@ -16,6 +19,7 @@ import javax.servlet.ServletException;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JwtAuthenticationTokenFilter
|
* JwtAuthenticationTokenFilter
|
||||||
@ -29,6 +33,7 @@ import java.io.IOException;
|
|||||||
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
||||||
|
|
||||||
private final UserDetailsService userDetailsService;
|
private final UserDetailsService userDetailsService;
|
||||||
|
private final OnlineUserService onlineUserService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doFilterInternal(HttpServletRequest request,
|
protected void doFilterInternal(HttpServletRequest request,
|
||||||
@ -39,6 +44,16 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
|||||||
String authHeader = request.getHeader(SecurityConstant.TOKEN_HEADER);
|
String authHeader = request.getHeader(SecurityConstant.TOKEN_HEADER);
|
||||||
if (StrUtil.isNotBlank(authHeader) && authHeader.startsWith(SecurityConstant.TOKEN_HEAD)) {
|
if (StrUtil.isNotBlank(authHeader) && authHeader.startsWith(SecurityConstant.TOKEN_HEAD)) {
|
||||||
String authToken = authHeader.substring(SecurityConstant.TOKEN_HEAD.length());
|
String authToken = authHeader.substring(SecurityConstant.TOKEN_HEAD.length());
|
||||||
|
// todo
|
||||||
|
String username1 = "admin";
|
||||||
|
OnlineUser onlineUser = onlineUserService.selectByUsername(username1);
|
||||||
|
if (Objects.isNull(onlineUser)) {
|
||||||
|
// todo 返回401
|
||||||
|
ResponseUtil.response(response, "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 续期有效期
|
||||||
|
onlineUserService.insert(onlineUser);
|
||||||
if (TokenUtil.validateToken(authToken)) {
|
if (TokenUtil.validateToken(authToken)) {
|
||||||
String username = TokenUtil.getUserNameFromToken(authToken);
|
String username = TokenUtil.getUserNameFromToken(authToken);
|
||||||
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
|
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.qiaoba.auth.service;
|
||||||
|
|
||||||
|
import com.qiaoba.auth.entity.OnlineUser;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线用户 服务层
|
||||||
|
*
|
||||||
|
* @author ailanyin
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2023/5/25 17:15
|
||||||
|
*/
|
||||||
|
public interface OnlineUserService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增
|
||||||
|
*
|
||||||
|
* @param onlineUser onlineUser
|
||||||
|
*/
|
||||||
|
void insert(OnlineUser onlineUser);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除(强退)
|
||||||
|
*
|
||||||
|
* @param username 登录账号
|
||||||
|
*/
|
||||||
|
void delete(String username);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
*
|
||||||
|
* @param username 登录账号
|
||||||
|
* @return 在线用户
|
||||||
|
*/
|
||||||
|
OnlineUser selectByUsername(String username);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量查询
|
||||||
|
*
|
||||||
|
* @param username username
|
||||||
|
* @return list
|
||||||
|
*/
|
||||||
|
List<OnlineUser> selectList(String username);
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.qiaoba.auth.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.qiaoba.auth.constants.SecurityConstant;
|
||||||
|
import com.qiaoba.auth.entity.OnlineUser;
|
||||||
|
import com.qiaoba.auth.service.OnlineUserService;
|
||||||
|
import com.qiaoba.auth.utils.TokenUtil;
|
||||||
|
import com.qiaoba.common.redis.service.RedisService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线用户 服务层实现
|
||||||
|
*
|
||||||
|
* @author ailanyin
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2023/5/25 17:15
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class OnlineUserServiceImpl implements OnlineUserService {
|
||||||
|
|
||||||
|
private final RedisService redisService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insert(OnlineUser onlineUser) {
|
||||||
|
redisService.set(handleKey(onlineUser.getUsername()), onlineUser, TokenUtil.expireTime * 3600);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(String username) {
|
||||||
|
redisService.del(handleKey(username));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OnlineUser selectByUsername(String username) {
|
||||||
|
if (redisService.hasKey(handleKey(username))) {
|
||||||
|
return redisService.getObject(handleKey(username), OnlineUser.class);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<OnlineUser> selectList(String username) {
|
||||||
|
String key = SecurityConstant.ONLINE_USER_REDIS_KEY + "*";
|
||||||
|
if (StrUtil.isNotBlank(username)) {
|
||||||
|
key = key + username + "*";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (redisService.hasKey(key)) {
|
||||||
|
return redisService.getObjectList(key, OnlineUser.class);
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String handleKey(String key) {
|
||||||
|
return SecurityConstant.ONLINE_USER_REDIS_KEY + key;
|
||||||
|
}
|
||||||
|
}
|
@ -2,12 +2,8 @@ package com.qiaoba.auth.utils;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DateField;
|
||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
|
||||||
import cn.hutool.jwt.JWTPayload;
|
import cn.hutool.jwt.JWTPayload;
|
||||||
import cn.hutool.jwt.JWTUtil;
|
import cn.hutool.jwt.JWTUtil;
|
||||||
import com.qiaoba.auth.constants.SecurityConstant;
|
|
||||||
import com.qiaoba.common.redis.service.RedisService;
|
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -26,15 +22,11 @@ public class TokenUtil {
|
|||||||
* jwt 加解密密钥,第一次项目启动时创建随机数
|
* jwt 加解密密钥,第一次项目启动时创建随机数
|
||||||
*/
|
*/
|
||||||
public static String secret;
|
public static String secret;
|
||||||
private static final RedisService redisService = SpringUtil.getBean(RedisService.class);
|
public static Integer expireTime = 1;
|
||||||
|
|
||||||
public static String generateToken(String username) {
|
public static String generateToken(String username) {
|
||||||
DateTime now = DateTime.now();
|
DateTime now = DateTime.now();
|
||||||
|
|
||||||
int expireTime = 1;
|
|
||||||
if (redisService.hasKey(SecurityConstant.TOKEN_EXPIRE_TIME_KEY)) {
|
|
||||||
expireTime = Integer.parseInt(redisService.get(SecurityConstant.TOKEN_EXPIRE_TIME_KEY).toString());
|
|
||||||
}
|
|
||||||
DateTime newTime = now.offsetNew(DateField.HOUR, expireTime);
|
DateTime newTime = now.offsetNew(DateField.HOUR, expireTime);
|
||||||
|
|
||||||
Map<String, Object> payload = new HashMap<String, Object>(4);
|
Map<String, Object> payload = new HashMap<String, Object>(4);
|
||||||
|
@ -1 +0,0 @@
|
|||||||
null not found
|
|
@ -20,5 +20,9 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.lionsoul</groupId>
|
||||||
|
<artifactId>ip2region</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
package com.qiaoba.common.web.config;
|
||||||
|
|
||||||
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
import com.qiaoba.common.web.utils.IpUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.lionsoul.ip2region.xdb.Searcher;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.annotation.PreDestroy;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 离线IP设置
|
||||||
|
*
|
||||||
|
* @author ailanyin
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2023/5/25 16:32
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Configuration
|
||||||
|
public class IpConfig {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void dbToCache() {
|
||||||
|
try {
|
||||||
|
ClassPathResource classPathResource = new ClassPathResource("ip2region.xdb");
|
||||||
|
InputStream inputStream = classPathResource.getInputStream();
|
||||||
|
IpUtil.setSearcher(Searcher.newWithBuffer(IoUtil.read(inputStream).toByteArray()));
|
||||||
|
log.info("加载IP离线库到成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("加载IP离线库到内存失败, 请联系管理员!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
public void close() {
|
||||||
|
IpUtil.closeSearcher();
|
||||||
|
log.info("IP离线库已关闭");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.qiaoba.common.web.utils;
|
||||||
|
|
||||||
|
import cn.hutool.extra.servlet.ServletUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.lionsoul.ip2region.xdb.Searcher;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IP工具类
|
||||||
|
*
|
||||||
|
* @author ailanyin
|
||||||
|
* @version 1.0
|
||||||
|
* @since 2023/5/25 15:49
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class IpUtil {
|
||||||
|
|
||||||
|
private static Searcher searcher;
|
||||||
|
|
||||||
|
public static void setSearcher(Searcher searcher) {
|
||||||
|
IpUtil.searcher = searcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getIp(HttpServletRequest request) {
|
||||||
|
return ServletUtil.getClientIP(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getIpAddr(String ip) {
|
||||||
|
try {
|
||||||
|
return searcher.search(ip);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return "error ip";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeSearcher() {
|
||||||
|
try {
|
||||||
|
searcher.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
com.qiaoba.common.web.advice.ExceptionAdvice,\
|
com.qiaoba.common.web.advice.ExceptionAdvice,\
|
||||||
|
com.qiaoba.common.web.config.IpConfig,\
|
||||||
com.qiaoba.common.web.config.GlobalCorsConfig
|
com.qiaoba.common.web.config.GlobalCorsConfig
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -15,6 +15,7 @@ import com.qiaoba.auth.utils.TokenUtil;
|
|||||||
import com.qiaoba.common.base.enums.BaseEnum;
|
import com.qiaoba.common.base.enums.BaseEnum;
|
||||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||||
import com.qiaoba.common.redis.service.RedisService;
|
import com.qiaoba.common.redis.service.RedisService;
|
||||||
|
import com.qiaoba.common.web.utils.IpUtil;
|
||||||
import com.qiaoba.module.system.service.SysLoginService;
|
import com.qiaoba.module.system.service.SysLoginService;
|
||||||
import com.qiaoba.module.system.service.SysUserService;
|
import com.qiaoba.module.system.service.SysUserService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
Reference in New Issue
Block a user