diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index b87d69b9a586cd0f2e8a19573442b3d5ffd3a63f..082741b9465bf03bd7e41cdbbf9d7b965c85797b 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -22,6 +22,7 @@ jobs:
with:
java-version: ${{ matrix.java-version }}
distribution: 'zulu'
+ cache: maven
- name: mvn spring-javaformat:validate
run: mvn spring-javaformat:validate
diff --git a/README.md b/README.md
index 412e642cb226a2f6498fbd28a3cac59688426a30..8f494cf911185afc232ab938d015b0f2097048a9 100644
--- a/README.md
+++ b/README.md
@@ -30,20 +30,30 @@

-
-
## 快速开始
+### 分支说明
+
+- master: java8 + springboot 2.7 + springcloud 2021
+- jdk17: java17 + springboot 3.0 + springcloud 2022
+
+| 分支 | 说明 |
+|-----------------|------------------------------------------------------------------|
+| master | java8 + springboot 2.7 + springcloud 2021 |
+| sca-springboot3 | java17 + springboot 3.0 + springcloud 2022 |
+| sct-springboot3 | java17 + springboot 3.0 + springcloud 2022 |
+
+
### 核心依赖
| 依赖 | 版本 |
| ---------------------- |------------|
-| Spring Boot | 2.7.6 |
-| Spring Cloud | 2021.0.5 |
-| Spring Cloud Alibaba | 2021.0.4.0 |
-| Spring Authorization Server | 0.4.0 |
-| Mybatis Plus | 3.5.2 |
-| hutool | 5.8.10 |
+| Spring Boot | 2.7.10 |
+| Spring Cloud | 2021.0.6 |
+| Spring Cloud Alibaba | 2021.0.5.0 |
+| Spring Authorization Server | 0.4.1 |
+| Mybatis Plus | 3.5.3.1 |
+| hutool | 5.8.17 |
### 模块说明
diff --git a/db/pig.sql b/db/pig.sql
index 9850a86f0635f8e23f355a146c56d07c1aefaf0b..afa97a0707aab7648e591d6a959268267b9e3406 100644
--- a/db/pig.sql
+++ b/db/pig.sql
@@ -1,28 +1,26 @@
DROP DATABASE IF EXISTS `pig`;
-CREATE DATABASE `pig` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+CREATE DATABASE `pig` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
USE `pig`;
--- ----------------------------
--- Table structure for sys_dept
--- ----------------------------
DROP TABLE IF EXISTS `sys_dept` ;
+-- 创建表 `sys_dept`
CREATE TABLE `sys_dept` (
- `dept_id` bigint NOT NULL,
- `name` varchar(50) COLLATE utf8_general_ci DEFAULT NULL COMMENT '部门名称',
- `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序',
- `del_flag` char(1) COLLATE utf8_general_ci DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常',
- `parent_id` bigint DEFAULT NULL,
- `create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `create_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
- `update_time` datetime DEFAULT NULL COMMENT '修改时间',
- `update_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
- PRIMARY KEY (`dept_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门管理';
+ `dept_id` bigint NOT NULL COMMENT '部门ID',
+ `name` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '部门名称',
+ `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序值',
+ `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标记 -1:已删除 0:正常',
+ `parent_id` bigint DEFAULT NULL COMMENT '父部门ID',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `create_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime DEFAULT NULL COMMENT '修改时间',
+ `update_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
+ PRIMARY KEY (`dept_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='部门管理';
-- ----------------------------
-- Records of sys_dept
@@ -37,17 +35,15 @@ INSERT INTO `sys_dept` VALUES (6, '产品中心', 0, '0', 3, '2020-03-13 13:15:4
INSERT INTO `sys_dept` VALUES (7, '测试中心', 0, '0', 3, '2020-03-13 13:16:02', ' ', '2021-12-31 06:59:56', ' ');
COMMIT;
--- ----------------------------
--- Table structure for sys_dept_relation
--- ----------------------------
DROP TABLE IF EXISTS `sys_dept_relation`;
+-- 创建表 `sys_dept_relation`
CREATE TABLE `sys_dept_relation` (
- `ancestor` bigint NOT NULL,
- `descendant` bigint NOT NULL,
- PRIMARY KEY (`ancestor`,`descendant`),
- KEY `idx1` (`ancestor`),
- KEY `idx2` (`descendant`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门关系表';
+ `ancestor` bigint NOT NULL COMMENT '祖先节点',
+ `descendant` bigint NOT NULL COMMENT '后代节点',
+ PRIMARY KEY (`ancestor`,`descendant`),
+ KEY `idx1` (`ancestor`),
+ KEY `idx2` (`descendant`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='部门关系表';
-- ----------------------------
-- Records of sys_dept_relation
@@ -77,18 +73,18 @@ COMMIT;
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
`id` bigint NOT NULL,
- `dict_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标识',
- `description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
- `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
- `system_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '是否是系统内置',
- `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
+ `dict_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '标识',
+ `description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '描述',
+ `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注',
+ `system_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '是否是系统内置',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标记',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
- `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `sys_dict_del_flag` (`del_flag`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='字典表';
-- ----------------------------
-- Records of sys_dict
@@ -112,23 +108,23 @@ DROP TABLE IF EXISTS `sys_dict_item`;
CREATE TABLE `sys_dict_item` (
`id` bigint NOT NULL,
`dict_id` bigint NOT NULL COMMENT '字典ID',
- `dict_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典标识',
- `value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '值',
- `label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签',
- `type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型',
- `description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
+ `dict_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字典标识',
+ `value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '值',
+ `label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '标签',
+ `type` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字典类型',
+ `description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '描述',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(升序)',
- `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT ' ' COMMENT '备注',
- `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
+ `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT ' ' COMMENT '备注',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标记',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
- `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `sys_dict_value` (`value`) USING BTREE,
KEY `sys_dict_label` (`label`) USING BTREE,
KEY `sys_dict_del_flag` (`del_flag`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='字典项';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='字典项';
-- ----------------------------
-- Records of sys_dict_item
@@ -173,21 +169,22 @@ COMMIT;
-- Table structure for sys_public_param
-- ----------------------------
DROP TABLE IF EXISTS `sys_public_param`;
+-- 创建表 `sys_public_param`
CREATE TABLE `sys_public_param` (
- `public_id` bigint(0) NOT NULL COMMENT '编号',
- `public_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `public_key` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `public_value` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0',
- `validate_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '创建人',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ' ' COMMENT '修改人',
- `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
- `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
- `public_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0',
- `system_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0',
- PRIMARY KEY (`public_id`) USING BTREE
-) ENGINE = InnoDB DEFAULT CHARSET=utf8 COLLATE = utf8_general_ci COMMENT = '公共参数配置表';
+ `public_id` bigint(0) NOT NULL COMMENT '编号',
+ `public_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '参数名称',
+ `public_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '参数键名',
+ `public_value` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '参数键值',
+ `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '状态,1-启用,0-禁用',
+ `validate_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '校验码',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ' ' COMMENT '创建人',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ' ' COMMENT '修改人',
+ `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+ `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
+ `public_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '参数类型,1-系统参数,2-业务参数',
+ `system_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '是否为系统内置参数,1-是,0-否',
+ PRIMARY KEY (`public_id`) USING BTREE
+) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_bin COMMENT = '公共参数配置表';
-- ----------------------------
-- Records of sys_public_param
@@ -203,19 +200,19 @@ COMMIT;
-- ----------------------------
DROP TABLE IF EXISTS `sys_file`;
CREATE TABLE `sys_file` (
- `id` bigint NOT NULL,
- `file_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
- `bucket_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
- `original` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
- `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
- `file_size` bigint DEFAULT NULL COMMENT '文件大小',
- `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '0-正常,1-删除',
- `create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime DEFAULT NULL COMMENT '修改时间',
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建者',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='文件管理表';
+ `id` bigint NOT NULL COMMENT '文件ID',
+ `file_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '文件名称',
+ `bucket_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '文件存储桶名称',
+ `original` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '原始文件名',
+ `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '文件类型',
+ `file_size` bigint DEFAULT NULL COMMENT '文件大小',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标志:0-正常,1-删除',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '修改时间',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建者',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='文件管理表';
-- ----------------------------
-- Records of sys_file
@@ -229,27 +226,27 @@ COMMIT;
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
`id` bigint NOT NULL,
- `type` char(1) COLLATE utf8_general_ci DEFAULT '1' COMMENT '日志类型',
- `title` varchar(255) COLLATE utf8_general_ci DEFAULT '' COMMENT '日志标题',
- `service_id` varchar(32) COLLATE utf8_general_ci DEFAULT NULL COMMENT '服务ID',
- `remote_addr` varchar(255) COLLATE utf8_general_ci DEFAULT NULL COMMENT '操作IP地址',
- `user_agent` varchar(1000) COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户代理',
- `request_uri` varchar(255) COLLATE utf8_general_ci DEFAULT NULL COMMENT '请求URI',
- `method` varchar(10) COLLATE utf8_general_ci DEFAULT NULL COMMENT '操作方式',
- `params` text COLLATE utf8_general_ci COMMENT '操作提交的数据',
+ `type` char(1) COLLATE utf8mb4_bin DEFAULT '1' COMMENT '日志类型',
+ `title` varchar(255) COLLATE utf8mb4_bin DEFAULT '' COMMENT '日志标题',
+ `service_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '服务ID',
+ `remote_addr` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '操作IP地址',
+ `user_agent` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户代理',
+ `request_uri` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '请求URI',
+ `method` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '操作方式',
+ `params` text COLLATE utf8mb4_bin COMMENT '操作提交的数据',
`time` bigint DEFAULT NULL COMMENT '执行时间',
- `del_flag` char(1) COLLATE utf8_general_ci DEFAULT '0' COMMENT '删除标记',
- `exception` text COLLATE utf8_general_ci COMMENT '异常信息',
+ `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标记',
+ `exception` text COLLATE utf8mb4_bin COMMENT '异常信息',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
- `create_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
- `update_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
+ `create_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `sys_log_create_by` (`create_by`),
KEY `sys_log_request_uri` (`request_uri`),
KEY `sys_log_type` (`type`),
KEY `sys_log_create_date` (`create_time`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='日志表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='日志表';
-- ----------------------------
-- Records of sys_log
@@ -263,21 +260,21 @@ COMMIT;
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`menu_id` bigint NOT NULL,
- `name` varchar(32) COLLATE utf8_general_ci NOT NULL COMMENT '菜单名称',
- `permission` varchar(32) COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单权限标识',
- `path` varchar(128) COLLATE utf8_general_ci DEFAULT NULL COMMENT '前端URL',
+ `name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '菜单名称',
+ `permission` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '菜单权限标识',
+ `path` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '前端URL',
`parent_id` bigint DEFAULT NULL COMMENT '父菜单ID',
- `icon` varchar(32) COLLATE utf8_general_ci DEFAULT NULL COMMENT '图标',
+ `icon` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '图标',
`sort_order` int NOT NULL DEFAULT '0' COMMENT '排序值',
- `keep_alive` char(1) COLLATE utf8_general_ci DEFAULT '0' COMMENT '0-开启,1- 关闭',
- `type` char(1) COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单类型 (0菜单 1按钮)',
- `del_flag` char(1) COLLATE utf8_general_ci DEFAULT '0' COMMENT '逻辑删除标记(0--正常 1--删除)',
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
+ `keep_alive` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-开启,1- 关闭',
+ `type` char(1) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '菜单类型 (0菜单 1按钮)',
+ `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '逻辑删除标记(0--正常 1--删除)',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '修改人',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`menu_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';
-- ----------------------------
-- Records of sys_menu
@@ -348,23 +345,23 @@ COMMIT;
-- ----------------------------
DROP TABLE IF EXISTS `sys_oauth_client_details`;
CREATE TABLE `sys_oauth_client_details` (
- `client_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '客户端ID',
- `resource_ids` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '资源列表',
- `client_secret` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '客户端密钥',
- `scope` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '域',
- `authorized_grant_types` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '认证类型',
- `web_server_redirect_uri` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '重定向地址',
- `authorities` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '角色列表',
+ `client_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '客户端ID',
+ `resource_ids` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '资源列表',
+ `client_secret` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '客户端密钥',
+ `scope` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '域',
+ `authorized_grant_types` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '认证类型',
+ `web_server_redirect_uri` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '重定向地址',
+ `authorities` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '角色列表',
`access_token_validity` int DEFAULT NULL COMMENT 'token 有效期',
`refresh_token_validity` int DEFAULT NULL COMMENT '刷新令牌有效期',
- `additional_information` varchar(4096) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '令牌扩展字段JSON',
- `autoapprove` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '是否自动放行',
+ `additional_information` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '令牌扩展字段JSON',
+ `autoapprove` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否自动放行',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`client_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='终端信息表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='终端信息表';
-- ----------------------------
-- Records of sys_oauth_client_details
@@ -384,17 +381,17 @@ COMMIT;
DROP TABLE IF EXISTS `sys_post`;
CREATE TABLE `sys_post` (
`post_id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
- `post_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位编码',
- `post_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位名称',
+ `post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位编码',
+ `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位名称',
`post_sort` int(0) NOT NULL COMMENT '岗位排序',
- `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建人',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新人',
- `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注信息',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新人',
+ `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注信息',
PRIMARY KEY (`post_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT = '岗位信息表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT = '岗位信息表';
-- ----------------------------
-- Records of sys_post
@@ -413,7 +410,7 @@ CREATE TABLE `sys_user_post` (
`user_id` bigint(0) NOT NULL COMMENT '用户ID',
`post_id` bigint(0) NOT NULL COMMENT '岗位ID',
PRIMARY KEY (`user_id`, `post_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT = '用户与岗位关联表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT = '用户与岗位关联表';
-- ----------------------------
-- Records of sys_user_post
@@ -427,18 +424,18 @@ COMMIT;
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
- `role_id` bigint NOT NULL,
- `role_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
- `role_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
- `role_desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
- `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '删除标识(0-正常,1-删除)',
- `create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime DEFAULT NULL COMMENT '修改时间',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '修改人',
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
- PRIMARY KEY (`role_id`),
- UNIQUE KEY `role_idx1_role_code` (`role_code`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统角色表';
+ `role_id` bigint NOT NULL COMMENT '角色ID',
+ `role_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '角色名称',
+ `role_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '角色代码',
+ `role_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '角色描述',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标识:0-正常,1-删除',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '修改时间',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '修改人',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ PRIMARY KEY (`role_id`),
+ UNIQUE KEY `role_idx1_role_code` (`role_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='系统角色表';
-- ----------------------------
-- Records of sys_role
@@ -453,10 +450,10 @@ COMMIT;
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
- `role_id` bigint NOT NULL,
- `menu_id` bigint NOT NULL,
- PRIMARY KEY (`role_id`,`menu_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色菜单表';
+ `role_id` bigint NOT NULL COMMENT '角色ID',
+ `menu_id` bigint NOT NULL COMMENT '菜单ID',
+ PRIMARY KEY (`role_id`,`menu_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='角色菜单表';
-- ----------------------------
-- Records of sys_role_menu
@@ -530,21 +527,21 @@ COMMIT;
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL,
- `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
- `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
- `salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '随机盐',
- `phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '简介',
- `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像',
+ `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',
+ `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '密码',
+ `salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '随机盐',
+ `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '简介',
+ `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像',
`dept_id` bigint DEFAULT NULL COMMENT '部门ID',
- `lock_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '0-正常,9-锁定',
- `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '0-正常,1-删除',
+ `lock_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,9-锁定',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,1-删除',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
- `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建者',
- `update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
+ `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建者',
+ `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`user_id`),
KEY `user_idx1_username` (`username`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户表';
-- ----------------------------
-- Records of sys_user
@@ -558,10 +555,10 @@ COMMIT;
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
- `user_id` bigint NOT NULL,
- `role_id` bigint NOT NULL,
- PRIMARY KEY (`user_id`,`role_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='用户角色表';
+ `user_id` bigint NOT NULL COMMENT '用户ID',
+ `role_id` bigint NOT NULL COMMENT '角色ID',
+ PRIMARY KEY (`user_id`,`role_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户角色表';
-- ----------------------------
-- Records of sys_user_role
diff --git a/db/pig_codegen.sql b/db/pig_codegen.sql
index 7f8859f2922b32acb19547e06389abf98fea7f84..791d139352bd6ca24c3c0f0b1600a46ed9f198a6 100644
--- a/db/pig_codegen.sql
+++ b/db/pig_codegen.sql
@@ -1,8 +1,8 @@
DROP DATABASE IF EXISTS `pig_codegen`;
-CREATE DATABASE `pig_codegen` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
+CREATE DATABASE `pig_codegen` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
-SET NAMES utf8;
+SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `pig_codegen`;
@@ -12,18 +12,18 @@ USE `pig_codegen`;
-- ----------------------------
DROP TABLE IF EXISTS `gen_datasource_conf`;
CREATE TABLE `gen_datasource_conf` (
- `id` bigint NOT NULL,
- `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '数据源名称',
- `url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'jdbc-url',
- `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名',
- `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',
- `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '删除标记',
- `create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `create_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
- `update_time` datetime DEFAULT NULL COMMENT '修改时间',
- `update_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='数据源表';
+ `id` bigint NOT NULL COMMENT '数据源ID',
+ `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数据源名称',
+ `url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'jdbc-url',
+ `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
+ `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标记',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `create_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime DEFAULT NULL COMMENT '修改时间',
+ `update_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='数据源表';
-- ----------------------------
-- Records of gen_datasource_conf
@@ -36,17 +36,17 @@ COMMIT;
-- ----------------------------
DROP TABLE IF EXISTS `gen_form_conf`;
CREATE TABLE `gen_form_conf` (
- `id` bigint NOT NULL,
- `table_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '表名',
- `form_info` json NOT NULL COMMENT '表单信息',
- `del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '删除标记',
- `create_time` datetime DEFAULT NULL COMMENT '创建时间',
- `create_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人',
- `update_time` datetime DEFAULT NULL COMMENT '修改时间',
- `update_by` varchar(64) COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人',
- PRIMARY KEY (`id`) USING BTREE,
- KEY `table_name` (`table_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='表单配置';
+ `id` bigint NOT NULL COMMENT '表单配置ID',
+ `table_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '表名',
+ `form_info` json NOT NULL COMMENT '表单信息',
+ `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标记',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `create_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime DEFAULT NULL COMMENT '修改时间',
+ `update_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `table_name` (`table_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='表单配置';
-- ----------------------------
-- Records of gen_form_conf
diff --git a/db/pig_config.sql b/db/pig_config.sql
index ef21140649dc4759e6f2103b50131f767d583d8a..3a404bb03cbac087a2b253f0b9b32544c89ffb24 100644
--- a/db/pig_config.sql
+++ b/db/pig_config.sql
@@ -37,12 +37,12 @@ CREATE TABLE `config_info` (
-- Records of config_info
-- ----------------------------
BEGIN;
-INSERT INTO `config_info` VALUES (1, 'application-dev.yml', 'DEFAULT_GROUP', '# 加解密根密码\njasypt:\n encryptor:\n password: pig #根密码\n \n# Spring 相关\nspring:\n cache:\n type: redis\n redis:\n host: pig-redis\n cloud:\n sentinel:\n eager: true\n transport:\n dashboard: pig-sentinel:5003\n\n# 暴露监控端点\nmanagement:\n endpoints:\n web:\n exposure:\n include: \"*\" \n endpoint:\n health:\n show-details: ALWAYS\n\n\n# feign 配置\nfeign:\n sentinel:\n enabled: true\n okhttp:\n enabled: true\n httpclient:\n enabled: false\n client:\n config:\n default:\n connectTimeout: 10000\n readTimeout: 10000\n compression:\n request:\n enabled: true\n response:\n enabled: true\n\n# mybaits-plus配置\nmybatis-plus:\n mapper-locations: classpath:/mapper/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: auto\n table-underline: true\n logic-delete-value: 1\n logic-not-delete-value: 0\n configuration:\n map-underscore-to-camel-case: true\n\n# spring security 配置\nsecurity:\n oauth2:\n # 通用放行URL,服务个性化,请在对应配置文件覆盖\n ignore:\n urls:\n - /v3/api-docs\n - /actuator/**\n\n# swagger 配置\nswagger:\n enabled: true\n title: Pig Swagger API\n gateway: http://${GATEWAY_HOST:pig-gateway}:${GATEWAY-PORT:9999}\n token-url: ${swagger.gateway}/auth/oauth2/token\n scope: server\n services:\n pig-upms-biz: admin\n pig-codegen: gen', 'a9fec7814841cfa5db8db2e4e6bdbf50', '2022-05-08 12:10:37', '2022-08-07 14:40:17', 'nacos', '127.0.0.1', '', '', '', '', '', 'yaml', '', '');
+INSERT INTO `config_info` VALUES (1, 'application-dev.yml', 'DEFAULT_GROUP', '# 配置文件加密根密码\njasypt:\n encryptor:\n password: pig\n algorithm: PBEWithMD5AndDES\n iv-generator-classname: org.jasypt.iv.NoIvGenerator\n \n# Spring 相关\nspring:\n cache:\n type: redis\n redis:\n host: pig-redis\n cloud:\n sentinel:\n eager: true\n transport:\n dashboard: pig-sentinel:5003\n\n# 暴露监控端点\nmanagement:\n endpoints:\n web:\n exposure:\n include: \"*\" \n endpoint:\n health:\n show-details: ALWAYS\n\n\n# feign 配置\nfeign:\n sentinel:\n enabled: true\n okhttp:\n enabled: true\n httpclient:\n enabled: false\n client:\n config:\n default:\n connectTimeout: 10000\n readTimeout: 10000\n compression:\n request:\n enabled: true\n response:\n enabled: true\n\n# mybaits-plus配置\nmybatis-plus:\n mapper-locations: classpath:/mapper/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: auto\n table-underline: true\n logic-delete-value: 1\n logic-not-delete-value: 0\n configuration:\n map-underscore-to-camel-case: true\n\n# swagger 配置\nswagger:\n enabled: true\n title: Pig Swagger API\n gateway: http://${GATEWAY_HOST:pig-gateway}:${GATEWAY-PORT:9999}\n token-url: ${swagger.gateway}/auth/oauth2/token\n scope: server\n services:\n pig-upms-biz: admin\n pig-codegen: gen', '81f8bae4b8125fd198704f797268c6b5', '2022-05-08 12:10:37', '2023-02-28 14:45:23', 'nacos', '127.0.0.1', '', '', '', '', '', 'yaml', '', '');
INSERT INTO `config_info` VALUES (2, 'pig-auth-dev.yml', 'DEFAULT_GROUP', '# 数据源\nspring:\n freemarker:\n allow-request-override: false\n allow-session-override: false\n cache: true\n charset: UTF-8\n check-template-location: true\n content-type: text/html\n enabled: true\n expose-request-attributes: false\n expose-session-attributes: false\n expose-spring-macro-helpers: true\n prefer-file-system-access: true\n suffix: .ftl\n template-loader-path: classpath:/templates/', '74f53b71c7799aa754da75662378b93c', '2022-05-08 12:10:37', '2022-06-04 14:15:35', 'nacos', '127.0.0.1', '', '', '', '', '', 'yaml', '', '');
-INSERT INTO `config_info` VALUES (3, 'pig-codegen-dev.yml', 'DEFAULT_GROUP', '## spring security 配置\nsecurity:\n oauth2:\n client:\n client-id: ENC(27v1agvAug87ANOVnbKdsw==)\n client-secret: ENC(VbnkopxrwgbFVKp+UxJ2pg==)\n scope: server\n\n# 数据源配置\nspring:\n datasource:\n type: com.zaxxer.hikari.HikariDataSource\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: root\n password: root\n url: jdbc:mysql://pig-mysql:3306/pig_codegen?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n resources:\n static-locations: classpath:/static/,classpath:/views/\n', '02fe9e81c41986626067b8cbe589b77f', '2022-05-08 12:10:37', '2022-05-08 12:10:37', NULL, '127.0.0.1', '', '', NULL, NULL, NULL, 'yaml', NULL, '');
+INSERT INTO `config_info` VALUES (3, 'pig-codegen-dev.yml', 'DEFAULT_GROUP', '# 数据源配置\nspring:\n datasource:\n type: com.zaxxer.hikari.HikariDataSource\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: root\n password: root\n url: jdbc:mysql://pig-mysql:3306/pig_codegen?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n resources:\n static-locations: classpath:/static/,classpath:/views/\n', 'cf786dbe3b07074fc187bf2eab3266b1', '2022-05-08 12:10:37', '2023-01-28 14:05:36', '', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', '');
INSERT INTO `config_info` VALUES (4, 'pig-gateway-dev.yml', 'DEFAULT_GROUP', 'spring:\n cloud:\n gateway:\n locator:\n enabled: true\n routes:\n # 认证中心\n - id: pig-auth\n uri: lb://pig-auth\n predicates:\n - Path=/auth/**\n filters:\n # 验证码处理\n - ValidateCodeGatewayFilter\n # 前端密码解密\n - PasswordDecoderFilter\n #UPMS 模块\n - id: pig-upms-biz\n uri: lb://pig-upms-biz\n predicates:\n - Path=/admin/**\n filters:\n # 限流配置\n - name: RequestRateLimiter\n args:\n key-resolver: \'#{@remoteAddrKeyResolver}\'\n redis-rate-limiter.replenishRate: 100\n redis-rate-limiter.burstCapacity: 200\n # 代码生成模块\n - id: pig-codegen\n uri: lb://pig-codegen\n predicates:\n - Path=/gen/**\n # 固定路由转发配置 无修改\n - id: openapi\n uri: lb://pig-gateway\n predicates:\n - Path=/v3/api-docs/**\n filters:\n - RewritePath=/v3/api-docs/(?.*), /$\\{path}/$\\{path}/v3/api-docs\n\ngateway:\n encode-key: \'thanks,pig4cloud\'\n ignore-clients:\n - test\n - client', '000988cf0102382d3f23df35027b47fd', '2022-05-08 12:10:37', '2022-06-07 14:00:11', 'nacos', '127.0.0.1', '', '', '', '', '', 'yaml', '', '');
INSERT INTO `config_info` VALUES (5, 'pig-monitor-dev.yml', 'DEFAULT_GROUP', 'spring:\n autoconfigure:\n exclude: com.pig4cloud.pig.common.core.config.JacksonConfiguration\n # 安全配置\n security:\n user:\n name: ENC(8Hk2ILNJM8UTOuW/Xi75qg==) # pig\n password: ENC(o6cuPFfUevmTbkmBnE67Ow====) # pig\n', '650bdfa15f60f3faa84dfe6e6878b8cf', '2022-05-08 12:10:37', '2022-05-08 12:10:37', NULL, '127.0.0.1', '', '', NULL, NULL, NULL, 'yaml', NULL, '');
-INSERT INTO `config_info` VALUES (6, 'pig-upms-biz-dev.yml', 'DEFAULT_GROUP', 'security:\n oauth2:\n client:\n client-id: ENC(imENTO7M8bLO38LFSIxnzw==)\n client-secret: ENC(i3cDFhs26sa2Ucrfz2hnQw==)\n scope: server\n\n# 数据源\nspring:\n datasource:\n type: com.zaxxer.hikari.HikariDataSource\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: root\n password: root\n url: jdbc:mysql://pig-mysql:3306/pig?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n\n# 文件上传相关 支持阿里云、华为云、腾讯、minio\noss:\n endpoint: http://minio.pig4cloud.com\n accessKey: lengleng\n secretKey: lengleng\n bucket-name: tmp', '107614b40932e8237787b769e0937ed2', '2022-05-08 12:10:37', '2022-05-08 12:10:37', NULL, '127.0.0.1', '', '', NULL, NULL, NULL, 'yaml', NULL, '');
+INSERT INTO `config_info` VALUES (6, 'pig-upms-biz-dev.yml', 'DEFAULT_GROUP', '# 数据源\nspring:\n datasource:\n type: com.zaxxer.hikari.HikariDataSource\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: root\n password: root\n url: jdbc:mysql://pig-mysql:3306/pig?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n\n# 文件上传相关 支持阿里云、华为云、腾讯、minio\noss:\n endpoint: http://minio.pig4cloud.com\n accessKey: lengleng\n secretKey: lengleng\n bucket-name: tmp', '899d2431d91da0d521378cc7fa61268d', '2022-05-08 12:10:37', '2023-01-28 14:01:46', '', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', '');
INSERT INTO `config_info` VALUES (7, 'pig-xxl-job-admin-dev.yml', 'DEFAULT_GROUP', '# xxl\nxxl:\n job:\n accessToken: default_token\n i18n: zh_CN\n logretentiondays: 30\n triggerpool:\n fast.max: 200\n slow.max: 200\n\n# mybatis\nmybatis:\n mapper-locations: classpath:/mybatis-mapper/*Mapper.xml\n\nspring:\n datasource:\n url: jdbc:mysql://${MYSQL_HOST:pig-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pig_job}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n driver-class-name: com.mysql.cj.jdbc.Driver\n username: ${MYSQL_USER:root}\n password: ${MYSQL_PWD:root}\n mvc:\n static-path-pattern: /static/**\n freemarker:\n suffix: .ftl\n request-context-attribute: request\n settings:\n number_format: 0.##########\n mail:\n host: smtp.mxhichina.com\n port: 465\n from: xxxx@gitee.wang\n username: xxxx@gitee.wang\n password: xxxx\n properties:\n mail:\n smtp:\n auth: true\n ssl.enable: true\n starttls.enable: false\n required: false\n# spring boot admin 配置\n\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \'*\'\n endpoint:\n health:\n show-details: ALWAYS\n\n', 'b67cbbd37c8b42cdc6521780b3ed742a', '2022-11-27 17:23:42', '2022-11-27 17:28:01', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', '');
COMMIT;
diff --git a/db/pig_job.sql b/db/pig_job.sql
index 585c6e8bf1b3554de2f4d752bc3a7f20b1a93e32..766178296f540d33db266d7944a47753ece907dd 100644
--- a/db/pig_job.sql
+++ b/db/pig_job.sql
@@ -1,10 +1,10 @@
DROP DATABASE IF EXISTS `pig_job`;
-CREATE DATABASE `pig_job` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+CREATE DATABASE `pig_job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
use `pig_job`;
-SET NAMES utf8;
+SET NAMES utf8mb4;
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -32,7 +32,7 @@ CREATE TABLE `xxl_job_info` (
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
@@ -53,7 +53,7 @@ CREATE TABLE `xxl_job_log` (
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -64,7 +64,7 @@ CREATE TABLE `xxl_job_log_report` (
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -75,7 +75,7 @@ CREATE TABLE `xxl_job_logglue` (
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -85,7 +85,7 @@ CREATE TABLE `xxl_job_registry` (
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -95,7 +95,7 @@ CREATE TABLE `xxl_job_group` (
`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@@ -105,12 +105,12 @@ CREATE TABLE `xxl_job_user` (
`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
diff --git a/docker-compose.yml b/docker-compose.yml
index be4193263a711c9f496c142fc9e4faa3f257b1e8..3380751d680e7175bec8baaefb9d19a69a152e0b 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -9,13 +9,9 @@ services:
restart: always
container_name: pig-mysql
image: pig-mysql
- ports:
- - 3306:3306
pig-redis:
image: redis:7.0.0
- ports:
- - 6379:6379
restart: always
container_name: pig-redis
hostname: pig-redis
diff --git a/pig-auth/pom.xml b/pig-auth/pom.xml
index 1e5e2da47c9c7087d584f1b5064692ad4e8d1e1c..9557d78de3f53e184bae675d41c99a3bc4fecfca 100755
--- a/pig-auth/pom.xml
+++ b/pig-auth/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-auth
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
index a6e9105d567dcad462d5fdef34d94a1c30677a24..8f1d0b8c28299f7aa3f94af0deb088d094f41980 100755
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
@@ -35,6 +35,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
+import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
import org.springframework.security.oauth2.server.authorization.token.DelegatingOAuth2TokenGenerator;
@@ -44,7 +45,6 @@ import org.springframework.security.oauth2.server.authorization.web.authenticati
import org.springframework.security.web.DefaultSecurityFilterChain;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationConverter;
-import org.springframework.security.web.util.matcher.RequestMatcher;
import java.util.Arrays;
@@ -63,25 +63,34 @@ public class AuthorizationServerConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
- OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = new OAuth2AuthorizationServerConfigurer();
- http.apply(authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {// 个性化认证授权端点
+ // OAuth 2.1 默认配置
+ // 缺省配置:authorizeRequests.anyRequest().authenticated()、
+ // csrf.ignoringRequestMatchers(endpointsMatcher) 等等
+ OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
+
+ // 使用 HttpSecurity 获取 OAuth 2.1 配置中的 OAuth2AuthorizationServerConfigurer 对象
+ OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = http
+ .getConfigurer(OAuth2AuthorizationServerConfigurer.class);
+
+ authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {// 个性化认证授权端点
tokenEndpoint.accessTokenRequestConverter(accessTokenRequestConverter()) // 注入自定义的授权认证Converter
- .accessTokenResponseHandler(new PigAuthenticationSuccessEventHandler()) // 登录成功处理器
- .errorResponseHandler(new PigAuthenticationFailureEventHandler());// 登录失败处理器
+ .accessTokenResponseHandler(new PigAuthenticationSuccessEventHandler()) // 登录成功处理器
+ .errorResponseHandler(new PigAuthenticationFailureEventHandler());// 登录失败处理器
}).clientAuthentication(oAuth2ClientAuthenticationConfigurer -> // 个性化客户端认证
oAuth2ClientAuthenticationConfigurer.errorResponseHandler(new PigAuthenticationFailureEventHandler()))// 处理客户端认证异常
- .authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint// 授权码端点个性化confirm页面
- .consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI)));
-
- RequestMatcher endpointsMatcher = authorizationServerConfigurer.getEndpointsMatcher();
- DefaultSecurityFilterChain securityFilterChain = http.requestMatcher(endpointsMatcher)
- .authorizeRequests(authorizeRequests -> authorizeRequests.anyRequest().authenticated())
- .apply(authorizationServerConfigurer.authorizationService(authorizationService)// redis存储token的实现
- .authorizationServerSettings(AuthorizationServerSettings.builder()
- .issuer(SecurityConstants.PROJECT_LICENSE).build()))
- // 授权码登录的登录页个性化
- .and().apply(new FormIdentityLoginConfigurer()).and().build();
+ .authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint// 授权码端点个性化confirm页面
+ .consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI));
+
+ DefaultSecurityFilterChain securityFilterChain = authorizationServerConfigurer
+ .authorizationService(authorizationService)// redis存储token的实现
+ .authorizationServerSettings(
+ AuthorizationServerSettings.builder().issuer(SecurityConstants.PROJECT_LICENSE).build())
+ // 授权码登录的登录页个性化
+ .and()
+ .apply(new FormIdentityLoginConfigurer())
+ .and()
+ .build();
// 注入自定义授权模式实现
addCustomOAuth2GrantAuthenticationProvider(http);
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java
index 0ebc699d9a1821d14d1b01016b6e18c8ce9d481d..81736c799df44d05d7c97c89d57f80065487e833 100755
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/config/WebSecurityConfiguration.java
@@ -41,9 +41,15 @@ public class WebSecurityConfiguration {
*/
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
- http.authorizeRequests(authorizeRequests -> authorizeRequests.antMatchers("/token/*").permitAll()// 开放自定义的部分端点
- .anyRequest().authenticated()).headers().frameOptions().sameOrigin()// 避免iframe同源无法登录
- .and().apply(new FormIdentityLoginConfigurer()); // 表单登录个性化
+ http.authorizeRequests(authorizeRequests -> authorizeRequests.antMatchers("/token/*")
+ .permitAll()// 开放自定义的部分端点
+ .anyRequest()
+ .authenticated())
+ .headers()
+ .frameOptions()
+ .sameOrigin()// 避免iframe同源无法登录
+ .and()
+ .apply(new FormIdentityLoginConfigurer()); // 表单登录个性化
// 处理 UsernamePasswordAuthenticationToken
http.authenticationProvider(new PigDaoAuthenticationProvider());
return http.build();
@@ -61,8 +67,13 @@ public class WebSecurityConfiguration {
@Order(0)
SecurityFilterChain resources(HttpSecurity http) throws Exception {
http.requestMatchers((matchers) -> matchers.antMatchers("/actuator/**", "/css/**", "/error"))
- .authorizeHttpRequests((authorize) -> authorize.anyRequest().permitAll()).requestCache().disable()
- .securityContext().disable().sessionManagement().disable();
+ .authorizeHttpRequests((authorize) -> authorize.anyRequest().permitAll())
+ .requestCache()
+ .disable()
+ .securityContext()
+ .disable()
+ .sessionManagement()
+ .disable();
return http.build();
}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
index 99b64714535553384f0c626854da741e39a46268..51b358ed244c8b458f411dd1c79c0ccff542e2a7 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
@@ -107,8 +107,9 @@ public class PigTokenEndpoint {
@RequestParam(OAuth2ParameterNames.CLIENT_ID) String clientId,
@RequestParam(OAuth2ParameterNames.SCOPE) String scope,
@RequestParam(OAuth2ParameterNames.STATE) String state) {
- SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId)).getData()
- .orElseThrow(() -> new OAuthClientException("clientId 不合法"));
+ SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId))
+ .getData()
+ .orElseThrow(() -> new OAuthClientException("clientId 不合法"));
Set authorizedScopes = StringUtils.commaDelimitedListToSet(clientDetails.getScope());
modelAndView.addObject("clientId", clientId);
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
index 7865f68d376b6fb1a8d21c239dcbd1f5f69b6679..667f6da5ada7b3382a871bc1233a4c93f85942e4 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
@@ -30,7 +30,7 @@ public class CustomeOAuth2AccessTokenGenerator implements OAuth2TokenGenerator additionalParameters = parameters.entrySet().stream()
- .filter(e -> !e.getKey().equals(OAuth2ParameterNames.GRANT_TYPE)
- && !e.getKey().equals(OAuth2ParameterNames.SCOPE))
- .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
+ Map additionalParameters = parameters.entrySet()
+ .stream()
+ .filter(e -> !e.getKey().equals(OAuth2ParameterNames.GRANT_TYPE)
+ && !e.getKey().equals(OAuth2ParameterNames.SCOPE))
+ .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
// 创建token
return buildToken(clientPrincipal, requestedScopes, additionalParameters);
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
index f551f77b98f4e0074866e22825cb199ea5b1bd80..0ef6892c1950a21228c1372bc0761061b0e33d7d 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
@@ -3,6 +3,7 @@ package com.pig4cloud.pig.auth.support.base;
import cn.hutool.extra.spring.SpringUtil;
import com.pig4cloud.pig.common.security.util.OAuth2ErrorCodesExpand;
import com.pig4cloud.pig.common.security.util.ScopeException;
+import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.support.MessageSourceAccessor;
@@ -35,6 +36,7 @@ import java.util.function.Supplier;
*
* 处理自定义授权
*/
+@Slf4j
public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider
implements AuthenticationProvider {
@@ -109,29 +111,29 @@ public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider authorizedScopes;
// Default to configured scopes
- if (!CollectionUtils.isEmpty(resouceOwnerBaseAuthentication.getScopes())) {
- for (String requestedScope : resouceOwnerBaseAuthentication.getScopes()) {
+ if (!CollectionUtils.isEmpty(resourceOwnerBaseAuthentication.getScopes())) {
+ for (String requestedScope : resourceOwnerBaseAuthentication.getScopes()) {
if (!registeredClient.getScopes().contains(requestedScope)) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.INVALID_SCOPE);
}
}
- authorizedScopes = new LinkedHashSet<>(resouceOwnerBaseAuthentication.getScopes());
+ authorizedScopes = new LinkedHashSet<>(resourceOwnerBaseAuthentication.getScopes());
}
else {
throw new ScopeException(OAuth2ErrorCodesExpand.SCOPE_IS_EMPTY);
}
- Map reqParameters = resouceOwnerBaseAuthentication.getAdditionalParameters();
+ Map reqParameters = resourceOwnerBaseAuthentication.getAdditionalParameters();
try {
UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = buildToken(reqParameters);
@@ -139,7 +141,7 @@ public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider) () -> new InternalAuthenticationServiceException("web request is empty"));
+ HttpServletRequest request = WebUtils.getRequest()
+ .orElseThrow(
+ (Supplier) () -> new InternalAuthenticationServiceException("web request is empty"));
Map paramMap = ServletUtil.getParamMap(request);
String grantType = paramMap.get(OAuth2ParameterNames.GRANT_TYPE);
@@ -104,12 +105,13 @@ public class PigDaoAuthenticationProvider extends AbstractUserDetailsAuthenticat
}
Map userDetailsServiceMap = SpringUtil
- .getBeansOfType(PigUserDetailsService.class);
+ .getBeansOfType(PigUserDetailsService.class);
String finalClientId = clientId;
- Optional optional = userDetailsServiceMap.values().stream()
- .filter(service -> service.support(finalClientId, grantType))
- .max(Comparator.comparingInt(Ordered::getOrder));
+ Optional optional = userDetailsServiceMap.values()
+ .stream()
+ .filter(service -> service.support(finalClientId, grantType))
+ .max(Comparator.comparingInt(Ordered::getOrder));
if (!optional.isPresent()) {
throw new InternalAuthenticationServiceException("UserDetailsService error , not register");
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
index a12b2a99df77d857c9396d9783b2300b4576a225..979282e179ebbb2fed9efdb47bbdd18b4a05f766 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
@@ -23,6 +23,7 @@ import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.util.MsgUtils;
import com.pig4cloud.pig.common.core.util.R;
import com.pig4cloud.pig.common.core.util.SpringContextHolder;
+import com.pig4cloud.pig.common.core.util.WebUtils;
import com.pig4cloud.pig.common.log.event.SysLogEvent;
import com.pig4cloud.pig.common.log.util.LogTypeEnum;
import com.pig4cloud.pig.common.log.util.SysLogUtils;
@@ -75,6 +76,8 @@ public class PigAuthenticationFailureEventHandler implements AuthenticationFailu
Long endTime = System.currentTimeMillis();
logVo.setTime(endTime - startTime);
}
+
+ logVo.setServiceId(WebUtils.getClientId());
logVo.setCreateBy(username);
logVo.setUpdateBy(username);
SpringContextHolder.publishEvent(new SysLogEvent(logVo));
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
index 162babd2133ea5fbf0800244d2efd67f9830ff80..09e6f01f88b659b4e2ab96d89e8ec4a754ffbae8 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
@@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
@@ -71,7 +72,10 @@ public class PigAuthenticationSuccessEventHandler implements AuthenticationSucce
// 发送异步日志事件
PigUser userInfo = (PigUser) map.get(SecurityConstants.DETAILS_USER);
log.info("用户:{} 登录成功", userInfo.getName());
- SecurityContextHolder.getContext().setAuthentication(accessTokenAuthentication);
+ // 避免 race condition
+ SecurityContext context = SecurityContextHolder.createEmptyContext();
+ context.setAuthentication(accessTokenAuthentication);
+ SecurityContextHolder.setContext(context);
SysLog logVo = SysLogUtils.getSysLog();
logVo.setTitle("登录成功");
String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME);
@@ -80,6 +84,8 @@ public class PigAuthenticationSuccessEventHandler implements AuthenticationSucce
Long endTime = System.currentTimeMillis();
logVo.setTime(endTime - startTime);
}
+
+ logVo.setServiceId(accessTokenAuthentication.getRegisteredClient().getClientId());
logVo.setCreateBy(userInfo.getName());
logVo.setUpdateBy(userInfo.getName());
SpringContextHolder.publishEvent(new SysLogEvent(logVo));
@@ -99,7 +105,8 @@ public class PigAuthenticationSuccessEventHandler implements AuthenticationSucce
Map additionalParameters = accessTokenAuthentication.getAdditionalParameters();
OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue())
- .tokenType(accessToken.getTokenType()).scopes(accessToken.getScopes());
+ .tokenType(accessToken.getTokenType())
+ .scopes(accessToken.getScopes());
if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
}
diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
index bc556612772a2396d2be582f0845d47e3e368a66..d7779e90198d687a550ab6bc2d19b99f54b13e2e 100644
--- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
+++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
@@ -52,7 +52,7 @@ public class OAuth2ResourceOwnerSmsAuthenticationProvider
public void checkClient(RegisteredClient registeredClient) {
assert registeredClient != null;
if (!registeredClient.getAuthorizationGrantTypes()
- .contains(new AuthorizationGrantType(SecurityConstants.APP))) {
+ .contains(new AuthorizationGrantType(SecurityConstants.APP))) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT);
}
}
diff --git a/pig-auth/src/main/resources/application.yml b/pig-auth/src/main/resources/application.yml
index 3690b33d37c0324eec92acae55a12685e09da6bb..8c60e73e60b42a207c12ba89c7da6e8a3c9ef853 100755
--- a/pig-auth/src/main/resources/application.yml
+++ b/pig-auth/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-common/pig-common-bom/pom.xml b/pig-common/pig-common-bom/pom.xml
index b82dd87b97c45265d40ae5b8ea2812df61b2c80f..ef5e0fac5debb90c551d96db0be9c35ca6521ae1 100644
--- a/pig-common/pig-common-bom/pom.xml
+++ b/pig-common/pig-common-bom/pom.xml
@@ -6,7 +6,7 @@
com.pig4cloud
pig-common-bom
- 3.6.4
+ 3.6.7
pom
pig-common-bom
@@ -15,7 +15,7 @@
${project.version}
- 2.7.6
+ 2.7.10
UTF-8
2.17.1
1.8
@@ -25,15 +25,15 @@
1.2.83
1.6.9
2.2.0
- 3.5.2
+ 3.5.3.1
8.0.31
- 1.5.2
+ 1.6.1
1.2.6
7.1
1.0.5
2.0.2
2.3.5
- 5.8.10
+ 5.8.17
2.7.4
1.8.4
diff --git a/pig-common/pig-common-core/pom.xml b/pig-common/pig-common-core/pom.xml
index d8457f55e26b730bc8843779c190d301708dc84a..6b3a2332e15b157299902cb63a637dc721503166 100755
--- a/pig-common/pig-common-core/pom.xml
+++ b/pig-common/pig-common-core/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-core
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
index 6668c673e3f60194a97ad532c036f3bf5a3eea36..bf689fcd13faaaed535917c2d21fcb45667f7348 100755
--- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
+++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
@@ -81,7 +81,6 @@ public class ClassUtils extends org.springframework.util.ClassUtils {
specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod);
// 先找方法,再找方法上的类
A annotation = AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType);
- ;
if (null != annotation) {
return annotation;
}
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
index ea59db5ace2177ab38fc7e57a6a8d23aeb580ec2..bc48065accd49516e13017e953169879b0f57932 100644
--- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
+++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
@@ -210,7 +210,7 @@ public class RetOps {
* @throws Ex 断言失败时抛出
*/
public RetOps assertDataNotEmpty(Function super R, ? extends Ex> func) throws Ex {
- if (ObjectUtil.isNotEmpty(original.getData())) {
+ if (ObjectUtil.isEmpty(original.getData())) {
throw func.apply(original);
}
return this;
diff --git a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
index e454735fd42838e3622d0cc3c0040991e62ce024..11a842bdeae83a64f502cc4d4cac91ba8e2a06c2 100755
--- a/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
+++ b/pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
@@ -105,13 +105,20 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
response.addCookie(cookie);
}
+ public ServletRequestAttributes getServletRequestAttributes() {
+ return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ }
+
/**
* 获取 HttpServletRequest
* @return {HttpServletRequest}
*/
public Optional getRequest() {
- return Optional
- .ofNullable(((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
+ ServletRequestAttributes servletRequestAttributes = getServletRequestAttributes();
+ if (servletRequestAttributes == null) {
+ return Optional.empty();
+ }
+ return Optional.of(servletRequestAttributes.getRequest());
}
/**
@@ -119,7 +126,11 @@ public class WebUtils extends org.springframework.web.util.WebUtils {
* @return {HttpServletResponse}
*/
public HttpServletResponse getResponse() {
- return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+ ServletRequestAttributes servletRequestAttributes = getServletRequestAttributes();
+ if (servletRequestAttributes == null) {
+ throw new CheckedException("无法获取HttpServletRequest");
+ }
+ return servletRequestAttributes.getResponse();
}
/**
diff --git a/pig-common/pig-common-datasource/pom.xml b/pig-common/pig-common-datasource/pom.xml
index 0af20a6ea1fc03a7a555d4224501e7e811b89969..e03d585e08ece72f5404178d95b8b3b2d57929e2 100644
--- a/pig-common/pig-common-datasource/pom.xml
+++ b/pig-common/pig-common-datasource/pom.xml
@@ -21,7 +21,7 @@
pig-common
com.pig4cloud
- 3.6.4
+ 3.6.7
4.0.0
diff --git a/pig-common/pig-common-feign/pom.xml b/pig-common/pig-common-feign/pom.xml
index 26451d25c0db32e4ffd3ef2f8711a11eab414022..0f2332db27d0abe610fba0eb6d1b155d4135513d 100755
--- a/pig-common/pig-common-feign/pom.xml
+++ b/pig-common/pig-common-feign/pom.xml
@@ -16,52 +16,58 @@
-->
-
- com.pig4cloud
- pig-common
- 3.6.4
-
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ com.pig4cloud
+ pig-common
+ 3.6.7
+
- 4.0.0
- jar
- pig-common-feign
- feign-sentinel服务降级熔断、限流组件
+ 4.0.0
+ jar
+ pig-common-feign
+ feign-sentinel服务降级熔断、限流组件
-
-
- com.pig4cloud
- pig-common-core
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-sentinel
-
-
-
- org.springframework.cloud
- spring-cloud-starter-openfeign
-
-
-
- io.github.openfeign
- feign-okhttp
-
-
-
- org.springframework.cloud
- spring-cloud-starter-loadbalancer
-
-
-
- com.github.ben-manes.caffeine
- caffeine
-
-
-
- org.springframework.security
- spring-security-core
-
-
+
+
+ com.pig4cloud
+ pig-common-core
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ io.github.openfeign
+ feign-okhttp
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+
+
+
+ org.springframework.security
+ spring-security-core
+
+
+
+ org.springframework.retry
+ spring-retry
+ true
+
+
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
index 44de28367bf78d50833bde096de97c787f64a829..ff9fa669bfee85b73ab73937bbf03547345e6082 100755
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
@@ -24,6 +24,7 @@ import com.pig4cloud.pig.common.feign.sentinel.ext.PigSentinelFeign;
import com.pig4cloud.pig.common.feign.sentinel.handle.PigUrlBlockHandler;
import com.pig4cloud.pig.common.feign.sentinel.parser.PigHeaderRequestOriginParser;
import feign.Feign;
+import okhttp3.OkHttpClient;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -31,6 +32,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
+import java.util.concurrent.TimeUnit;
+
/**
* sentinel 配置
*
@@ -61,4 +64,18 @@ public class PigFeignAutoConfiguration {
return new PigHeaderRequestOriginParser();
}
+ /**
+ * OkHttp 客户端配置
+ * @return OkHttp 客户端配
+ */
+ @Bean
+ public OkHttpClient okHttpClient() {
+ return new OkHttpClient.Builder().retryOnConnectionFailure(false) // 是否开启缓存
+ .connectTimeout(30L, TimeUnit.SECONDS) // 连接超时时间
+ .readTimeout(30L, TimeUnit.SECONDS) // 读取超时时间
+ .writeTimeout(30L, TimeUnit.SECONDS)
+ .followRedirects(true) // 是否允许重定向
+ .build();
+ }
+
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignRetryAutoConfiguration.java
similarity index 54%
rename from pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java
rename to pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignRetryAutoConfiguration.java
index a66b52d0e1655f583bf96f66d5ba48ebdecdb225..413c35f7173ea1d5a807444ae849b415672f6ab1 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignRetryAutoConfiguration.java
@@ -14,22 +14,27 @@
* limitations under the License.
*/
-package com.pig4cloud.pig.common.security.feign;
+package com.pig4cloud.pig.common.feign;
-import feign.RequestInterceptor;
+import com.pig4cloud.pig.common.feign.retry.FeignRetryAspect;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
-import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.retry.support.RetryTemplate;
-public class PigFeignClientConfiguration {
+/**
+ * 重试配置
+ *
+ * @author lengleng
+ * @date 2023年03月09日
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnClass(RetryTemplate.class)
+public class PigFeignRetryAutoConfiguration {
- /**
- * 注入 oauth2 feign token 增强
- * @param tokenResolver token获取处理器
- * @return 拦截器
- */
@Bean
- public RequestInterceptor oauthRequestInterceptor(BearerTokenResolver tokenResolver) {
- return new PigOAuthRequestInterceptor(tokenResolver);
+ public FeignRetryAspect feignRetryAspect() {
+ return new FeignRetryAspect();
}
}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/Backoff.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/Backoff.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c4260d96e7a97487828adb03ab84155fe838895
--- /dev/null
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/Backoff.java
@@ -0,0 +1,21 @@
+package com.pig4cloud.pig.common.feign.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 重试具体的策略
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Backoff {
+
+ long delay() default 1000L;
+
+ long maxDelay() default 0L;
+
+ double multiplier() default 0.0D;
+
+}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/FeignRetry.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/FeignRetry.java
new file mode 100644
index 0000000000000000000000000000000000000000..846d09a3938a968ba6f5ad1a5522e8fad9f3544e
--- /dev/null
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/FeignRetry.java
@@ -0,0 +1,21 @@
+package com.pig4cloud.pig.common.feign.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 重试注解,作用在 @FeignClient 注解之上
+ */
+@Target({ ElementType.METHOD, ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface FeignRetry {
+
+ Backoff backoff() default @Backoff();
+
+ int maxAttempt() default 3;
+
+ Class extends Throwable>[] include() default {};
+
+}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/retry/FeignRetryAspect.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/retry/FeignRetryAspect.java
new file mode 100644
index 0000000000000000000000000000000000000000..3119b7c06d5a92d85ba0b50d48523316e79dd73e
--- /dev/null
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/retry/FeignRetryAspect.java
@@ -0,0 +1,92 @@
+package com.pig4cloud.pig.common.feign.retry;
+
+import com.pig4cloud.pig.common.feign.annotation.FeignRetry;
+import feign.RetryableException;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.retry.backoff.BackOffPolicy;
+import org.springframework.retry.backoff.ExponentialBackOffPolicy;
+import org.springframework.retry.backoff.FixedBackOffPolicy;
+import org.springframework.retry.policy.SimpleRetryPolicy;
+import org.springframework.retry.support.RetryTemplate;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * FeignRetry 注解切面注入 retryTemplate
+ *
+ * @author lengleng
+ * @date 2023/1/21
+ * {@link org.springframework.cloud.loadbalancer.blocking.retry.BlockingLoadBalancedRetryPolicy}.
+ */
+@Slf4j
+@Aspect
+public class FeignRetryAspect {
+
+ @Around("@annotation(feignRetry)")
+ public Object retry(ProceedingJoinPoint joinPoint, FeignRetry feignRetry) throws Throwable {
+ Method method = getCurrentMethod(joinPoint);
+
+ RetryTemplate retryTemplate = new RetryTemplate();
+ retryTemplate.setBackOffPolicy(prepareBackOffPolicy(feignRetry));
+ retryTemplate.setRetryPolicy(prepareSimpleRetryPolicy(feignRetry));
+
+ // 重试
+ return retryTemplate.execute(arg0 -> {
+ int retryCount = arg0.getRetryCount();
+ log.info("Sending request method: {}, max attempt: {}, delay: {}, retryCount: {}", method.getName(),
+ feignRetry.maxAttempt(), feignRetry.backoff().delay(), retryCount);
+ return joinPoint.proceed(joinPoint.getArgs());
+ });
+ }
+
+ /**
+ * 构造重试策略
+ * @param feignRetry 重试注解
+ * @return BackOffPolicy
+ */
+ private BackOffPolicy prepareBackOffPolicy(FeignRetry feignRetry) {
+ if (feignRetry.backoff().multiplier() != 0) {
+ ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
+ backOffPolicy.setInitialInterval(feignRetry.backoff().delay());
+ backOffPolicy.setMaxInterval(feignRetry.backoff().maxDelay());
+ backOffPolicy.setMultiplier(feignRetry.backoff().multiplier());
+ return backOffPolicy;
+ }
+ else {
+ FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
+ fixedBackOffPolicy.setBackOffPeriod(feignRetry.backoff().delay());
+ return fixedBackOffPolicy;
+ }
+ }
+
+ /**
+ * 构造重试策略
+ * @param feignRetry 重试注解
+ * @return SimpleRetryPolicy
+ */
+ private SimpleRetryPolicy prepareSimpleRetryPolicy(FeignRetry feignRetry) {
+ Map, Boolean> policyMap = new HashMap<>();
+ policyMap.put(RetryableException.class, true); // Connection refused or time out
+
+ if (feignRetry.include().length != 0) {
+ for (Class extends Throwable> t : feignRetry.include()) {
+ policyMap.put(t, true);
+ }
+ }
+
+ return new SimpleRetryPolicy(feignRetry.maxAttempt(), policyMap, true);
+ }
+
+ private Method getCurrentMethod(JoinPoint joinPoint) {
+ MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+ return signature.getMethod();
+ }
+
+}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
index 474ff71751ecc7412e9c351f0bb80d7dc7fe71ad..3a6e7ea40805185508aba7eb679dbf540747e49a 100644
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
@@ -106,8 +106,8 @@ public final class PigSentinelFeign {
private Object getFromContext(String name, String type, Class> fallbackType, Class> targetType) {
Object fallbackInstance = feignContext.getInstance(name, fallbackType);
if (fallbackInstance == null) {
- throw new IllegalStateException(String.format(
- "No %s instance of type %s found for feign client %s", type, fallbackType, name));
+ throw new IllegalStateException(String
+ .format("No %s instance of type %s found for feign client %s", type, fallbackType, name));
}
if (!targetType.isAssignableFrom(fallbackType)) {
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
index da0afb5be5ca8fb97b416c2f107ecd4afe397d9c..d1bf4270c5cfe0e96c0e1ccc8e2312b8a76821d4 100644
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
@@ -25,12 +25,14 @@ import com.alibaba.csp.sentinel.Tracer;
import com.alibaba.csp.sentinel.context.ContextUtil;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.pig4cloud.pig.common.core.util.R;
+import com.pig4cloud.pig.common.feign.annotation.FeignRetry;
import feign.Feign;
import feign.InvocationHandlerFactory;
import feign.MethodMetadata;
import feign.Target;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.core.annotation.AnnotationUtils;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
@@ -38,6 +40,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Objects;
import static feign.Util.checkNotNull;
@@ -101,7 +104,7 @@ public class PigSentinelInvocationHandler implements InvocationHandler {
if (target instanceof Target.HardCodedTarget) {
Target.HardCodedTarget> hardCodedTarget = (Target.HardCodedTarget) target;
MethodMetadata methodMetadata = SentinelContractHolder.METADATA_MAP
- .get(hardCodedTarget.type().getName() + Feign.configKey(hardCodedTarget.type(), method));
+ .get(hardCodedTarget.type().getName() + Feign.configKey(hardCodedTarget.type(), method));
// resource default is HttpMethod:protocol://url
if (methodMetadata == null) {
result = methodHandler.invoke(args);
@@ -134,8 +137,9 @@ public class PigSentinelInvocationHandler implements InvocationHandler {
}
}
else {
- // 若是R类型 执行自动降级返回R
- if (R.class == method.getReturnType()) {
+ // 若是R类型 并且不包含@FeignRetry 执行自动降级返回R
+ FeignRetry feignRetry = AnnotationUtils.findAnnotation(method, FeignRetry.class);
+ if (R.class == method.getReturnType() && Objects.isNull(feignRetry)) {
log.error("feign 服务间调用异常", ex);
return R.failed(ex.getLocalizedMessage());
}
diff --git a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
index 89bad6202e4411ad085fb817a1bdc532eecb8474..3dccbf3c8cf1cc317185000e523cec14eb459f96 100644
--- a/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
+++ b/pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
@@ -88,8 +88,8 @@ public class GlobalBizExceptionHandler {
@ExceptionHandler(AccessDeniedException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public R handleAccessDeniedException(AccessDeniedException e) {
- String msg = SpringSecurityMessageSource.getAccessor().getMessage("AbstractAccessDecisionManager.accessDenied",
- e.getMessage());
+ String msg = SpringSecurityMessageSource.getAccessor()
+ .getMessage("AbstractAccessDecisionManager.accessDenied", e.getMessage());
log.warn("拒绝授权异常信息 ex={}", msg);
return R.failed(e.getLocalizedMessage());
}
diff --git a/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java b/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
index 8230d93d126f46ff91c12c331d210b5c54a7f2eb..55d495c1dec0de3174df25f397dafcff90b3a43b 100644
--- a/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
+++ b/pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
@@ -91,7 +91,7 @@ public class PigFeignClientsRegistrar implements ImportBeanDefinitionRegistrar,
validate(attributes);
BeanDefinitionBuilder definition = BeanDefinitionBuilder
- .genericBeanDefinition(FeignClientFactoryBean.class);
+ .genericBeanDefinition(FeignClientFactoryBean.class);
definition.addPropertyValue("url", getUrl(attributes));
definition.addPropertyValue("path", getPath(attributes));
String name = getName(attributes);
diff --git a/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index caa9f52f81845862d2d50099a0f81490d7181746..4531157b81ddec1988699b235d2d9b11f6461dab 100644
--- a/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,4 @@
com.pig4cloud.pig.common.feign.PigFeignAutoConfiguration
+com.pig4cloud.pig.common.feign.PigFeignRetryAutoConfiguration
com.pig4cloud.pig.common.feign.sentinel.SentinelAutoConfiguration
com.pig4cloud.pig.common.feign.sentinel.handle.GlobalBizExceptionHandler
diff --git a/pig-common/pig-common-job/pom.xml b/pig-common/pig-common-job/pom.xml
index 1a12427d4b4395c3955038932bd9acc2f701a900..6c5b166af517a26068015df51626d8a3fc424653 100755
--- a/pig-common/pig-common-job/pom.xml
+++ b/pig-common/pig-common-job/pom.xml
@@ -23,7 +23,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-job
diff --git a/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java b/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java
index 0555aadb6fe1eb501325c5a83482d2fa6d834a1d..e162c0f1f0201788ffecc2d0114b790fda180a22 100644
--- a/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java
+++ b/pig-common/pig-common-job/src/main/java/com/pig4cloud/pig/common/job/XxlJobAutoConfiguration.java
@@ -61,10 +61,13 @@ public class XxlJobAutoConfiguration {
// 如果配置为空则获取注册中心的服务列表 "http://pig-xxl:9080/xxl-job-admin"
if (!StringUtils.hasText(xxlJobProperties.getAdmin().getAddresses())) {
- String serverList = discoveryClient.getServices().stream().filter(s -> s.contains(XXL_JOB_ADMIN))
- .flatMap(s -> discoveryClient.getInstances(s).stream()).map(instance -> String
- .format("http://%s:%s/%s", instance.getHost(), instance.getPort(), XXL_JOB_ADMIN))
- .collect(Collectors.joining(","));
+ String serverList = discoveryClient.getServices()
+ .stream()
+ .filter(s -> s.contains(XXL_JOB_ADMIN))
+ .flatMap(s -> discoveryClient.getInstances(s).stream())
+ .map(instance -> String.format("http://%s:%s/%s", instance.getHost(), instance.getPort(),
+ XXL_JOB_ADMIN))
+ .collect(Collectors.joining(","));
xxlJobSpringExecutor.setAdminAddresses(serverList);
}
else {
diff --git a/pig-common/pig-common-log/pom.xml b/pig-common/pig-common-log/pom.xml
index 83acf4c35bb9551b3adaf24b7cf40db93f52b3b4..b01f6f3849ea31e7ae66748d46125e480f94e79c 100755
--- a/pig-common/pig-common-log/pom.xml
+++ b/pig-common/pig-common-log/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-log
@@ -54,5 +54,9 @@
org.springframework.security
spring-security-core
+
+ org.springframework.security
+ spring-security-oauth2-core
+
diff --git a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
index 4d980646b574753332e6d0febecfe1c05f3a572e..6046cfe9703fbd2afa042286c4b3452b8b3efc4d 100755
--- a/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
+++ b/pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
@@ -16,10 +16,12 @@
package com.pig4cloud.pig.common.log.util;
+import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpUtil;
import com.pig4cloud.pig.admin.api.entity.SysLog;
+import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import lombok.experimental.UtilityClass;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
@@ -29,6 +31,7 @@ import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.http.HttpHeaders;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -46,7 +49,7 @@ public class SysLogUtils {
public SysLog getSysLog() {
HttpServletRequest request = ((ServletRequestAttributes) Objects
- .requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+ .requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
SysLog sysLog = new SysLog();
sysLog.setType(LogTypeEnum.NORMAL.getType());
sysLog.setRemoteAddr(ServletUtil.getClientIP(request));
@@ -56,9 +59,28 @@ public class SysLogUtils {
sysLog.setParams(HttpUtil.toParams(request.getParameterMap()));
sysLog.setCreateBy(getUsername());
sysLog.setUpdateBy(getUsername());
+ sysLog.setServiceId(getClientId());
return sysLog;
}
+ /**
+ * 获取客户端
+ * @return clientId
+ */
+ private String getClientId() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication == null) {
+ return null;
+ }
+
+ Object principal = authentication.getPrincipal();
+ if (principal instanceof OAuth2AuthenticatedPrincipal) {
+ OAuth2AuthenticatedPrincipal auth2Authentication = (OAuth2AuthenticatedPrincipal) principal;
+ return MapUtil.getStr(auth2Authentication.getAttributes(), SecurityConstants.CLIENT_ID);
+ }
+ return null;
+ }
+
/**
* 获取用户名称
* @return username
diff --git a/pig-common/pig-common-mybatis/pom.xml b/pig-common/pig-common-mybatis/pom.xml
index 84c3a56f92980931a8187e4da4a6e0743b8276df..c2d0b5dafcecbdeb43d08cf34cede1ec10fb1ade 100755
--- a/pig-common/pig-common-mybatis/pom.xml
+++ b/pig-common/pig-common-mybatis/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-mybatis
diff --git a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
index 5084471d1ab443a98860545609d9c121409e97ea..683b13e072828740a031f9eaca0f794fbddb529e 100644
--- a/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
+++ b/pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
@@ -88,10 +88,12 @@ public class SqlFilterArgumentResolver implements HandlerMethodArgumentResolver
}
List orderItemList = new ArrayList<>();
- Optional.ofNullable(ascs).ifPresent(s -> orderItemList.addAll(
- Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::asc).collect(Collectors.toList())));
- Optional.ofNullable(descs).ifPresent(s -> orderItemList.addAll(
- Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::desc).collect(Collectors.toList())));
+ Optional.ofNullable(ascs)
+ .ifPresent(s -> orderItemList.addAll(
+ Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::asc).collect(Collectors.toList())));
+ Optional.ofNullable(descs)
+ .ifPresent(s -> orderItemList.addAll(
+ Arrays.stream(s).filter(sqlInjectPredicate()).map(OrderItem::desc).collect(Collectors.toList())));
page.addOrder(orderItemList);
return page;
diff --git a/pig-common/pig-common-seata/pom.xml b/pig-common/pig-common-seata/pom.xml
index 6b80cb4ae6d8ec578448bea1e596425c856aa0f6..d227a7fc819693ce37906a3284e5945245f272a0 100755
--- a/pig-common/pig-common-seata/pom.xml
+++ b/pig-common/pig-common-seata/pom.xml
@@ -23,7 +23,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-seata
diff --git a/pig-common/pig-common-security/pom.xml b/pig-common/pig-common-security/pom.xml
index 469aa634a797c258d6575b72f5e0b033bf4bc326..46652e783619cb38bf5c795aff4ec7bb09770e64 100755
--- a/pig-common/pig-common-security/pom.xml
+++ b/pig-common/pig-common-security/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-security
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java
index 806cbea8437f481aff9539b8f1379fc647a72f82..3dbbd0c6609a4cdfa5139d8f74c3f839dcb028f6 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java
@@ -18,7 +18,6 @@ package com.pig4cloud.pig.common.security.annotation;
import com.pig4cloud.pig.common.security.component.PigResourceServerAutoConfiguration;
import com.pig4cloud.pig.common.security.component.PigResourceServerConfiguration;
-import com.pig4cloud.pig.common.security.feign.PigFeignClientConfiguration;
import org.springframework.context.annotation.Import;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
@@ -35,8 +34,7 @@ import java.lang.annotation.*;
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@EnableGlobalMethodSecurity(prePostEnabled = true)
-@Import({ PigResourceServerAutoConfiguration.class, PigResourceServerConfiguration.class,
- PigFeignClientConfiguration.class })
+@Import({ PigResourceServerAutoConfiguration.class, PigResourceServerConfiguration.class })
public @interface EnablePigResourceServer {
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
index fcf394a4746678470ca80dc3a28cb215d8e46d85..5bef7ab3580f0fba167947bded01dc5c0b8ad744 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
@@ -46,8 +46,10 @@ public class PermissionService {
return false;
}
Collection extends GrantedAuthority> authorities = authentication.getAuthorities();
- return authorities.stream().map(GrantedAuthority::getAuthority).filter(StringUtils::hasText)
- .anyMatch(x -> PatternMatchUtils.simpleMatch(permissions, x));
+ return authorities.stream()
+ .map(GrantedAuthority::getAuthority)
+ .filter(StringUtils::hasText)
+ .anyMatch(x -> PatternMatchUtils.simpleMatch(permissions, x));
}
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
index 3e8aae220de3499d77a2e47230ee2d5291c5eeaf..f6f068cba94ac7f49bfd292b12233568ca26753e 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
@@ -61,13 +61,17 @@ public class PermitAllUrlProperties implements InitializingBean {
// 获取方法上边的注解 替代path variable 为 *
Inner method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Inner.class);
- Optional.ofNullable(method).ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
- .getPatternValues().forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
+ Optional.ofNullable(method)
+ .ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
+ .getPatternValues()
+ .forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
// 获取类上边的注解, 替代path variable 为 *
Inner controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Inner.class);
- Optional.ofNullable(controller).ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
- .getPatternValues().forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
+ Optional.ofNullable(controller)
+ .ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
+ .getPatternValues()
+ .forEach(url -> urls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
});
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
index 47353cf9e8e08f9f7c197aa8fdaa8272c1895307..9868c7b18419af4f505f5a8c7cd52248bb36dca3 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
@@ -55,8 +55,9 @@ public class PigBearerTokenExtractor implements BearerTokenResolver {
@Override
public String resolve(HttpServletRequest request) {
- boolean match = urlProperties.getUrls().stream()
- .anyMatch(url -> pathMatcher.match(url, request.getRequestURI()));
+ boolean match = urlProperties.getUrls()
+ .stream()
+ .anyMatch(url -> pathMatcher.match(url, request.getRequestURI()));
if (match) {
return null;
@@ -68,7 +69,7 @@ public class PigBearerTokenExtractor implements BearerTokenResolver {
if (authorizationHeaderToken != null) {
if (parameterToken != null) {
final BearerTokenError error = BearerTokenErrors
- .invalidRequest("Found multiple bearer tokens in the request");
+ .invalidRequest("Found multiple bearer tokens in the request");
throw new OAuth2AuthenticationException(error);
}
return authorizationHeaderToken;
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java
deleted file mode 100644
index 9765be356e17fbfa1a38b66fa1fe11ac143baab6..0000000000000000000000000000000000000000
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.pig4cloud.pig.common.security.component;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * @author lengleng
- * @date 2022/7/6
- *
- * credential 支持客户端模式的用户存储
- */
-@RequiredArgsConstructor
-public class PigClientCredentialsOAuth2AuthenticatedPrincipal implements OAuth2AuthenticatedPrincipal {
-
- private final Map attributes;
-
- private final Collection authorities;
-
- private final String name;
-
- @Override
- public Map getAttributes() {
- return this.attributes;
- }
-
- @Override
- public Collection extends GrantedAuthority> getAuthorities() {
- return this.authorities;
- }
-
- @Override
- public String getName() {
- return this.name;
- }
-
-}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
index d250f389ef02db6de362f98b7e5ccd926f2fea15..96148d10697ebef08a9318e5d6c48fa6ace7b7d5 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
@@ -1,6 +1,7 @@
package com.pig4cloud.pig.common.security.component;
import cn.hutool.extra.spring.SpringUtil;
+import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.security.service.PigUser;
import com.pig4cloud.pig.common.security.service.PigUserDetailsService;
import lombok.RequiredArgsConstructor;
@@ -11,6 +12,7 @@ import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
+import org.springframework.security.oauth2.core.DefaultOAuth2AuthenticatedPrincipal;
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
@@ -43,17 +45,18 @@ public class PigCustomOpaqueTokenIntrospector implements OpaqueTokenIntrospector
// 客户端模式默认返回
if (AuthorizationGrantType.CLIENT_CREDENTIALS.equals(oldAuthorization.getAuthorizationGrantType())) {
- return new PigClientCredentialsOAuth2AuthenticatedPrincipal(oldAuthorization.getAttributes(),
- AuthorityUtils.NO_AUTHORITIES, oldAuthorization.getPrincipalName());
+ return new DefaultOAuth2AuthenticatedPrincipal(oldAuthorization.getPrincipalName(),
+ oldAuthorization.getAttributes(), AuthorityUtils.NO_AUTHORITIES);
}
Map userDetailsServiceMap = SpringUtil
- .getBeansOfType(PigUserDetailsService.class);
+ .getBeansOfType(PigUserDetailsService.class);
- Optional optional = userDetailsServiceMap.values().stream()
- .filter(service -> service.support(Objects.requireNonNull(oldAuthorization).getRegisteredClientId(),
- oldAuthorization.getAuthorizationGrantType().getValue()))
- .max(Comparator.comparingInt(Ordered::getOrder));
+ Optional optional = userDetailsServiceMap.values()
+ .stream()
+ .filter(service -> service.support(Objects.requireNonNull(oldAuthorization).getRegisteredClientId(),
+ oldAuthorization.getAuthorizationGrantType().getValue()))
+ .max(Comparator.comparingInt(Ordered::getOrder));
UserDetails userDetails = null;
try {
@@ -69,7 +72,13 @@ public class PigCustomOpaqueTokenIntrospector implements OpaqueTokenIntrospector
catch (Exception ex) {
log.error("资源服务器 introspect Token error {}", ex.getLocalizedMessage());
}
- return (PigUser) userDetails;
+
+ // 注入扩展属性,方便上下文获取客户端ID
+ PigUser user = (PigUser) userDetails;
+ Objects.requireNonNull(user)
+ .getAttributes()
+ .put(SecurityConstants.CLIENT_ID, oldAuthorization.getRegisteredClientId());
+ return user;
}
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigOAuthRequestInterceptor.java
similarity index 92%
rename from pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java
rename to pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigOAuthRequestInterceptor.java
index 597ac3625bfe4c2cbb3179ab1ea001b47f5e3084..edb5812f9336aacfa056fcb7f9175cc6ac9c4837 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigOAuthRequestInterceptor.java
@@ -1,7 +1,7 @@
-package com.pig4cloud.pig.common.security.feign;
+package com.pig4cloud.pig.common.security.component;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.util.WebUtils;
import feign.RequestInterceptor;
@@ -52,7 +52,7 @@ public class PigOAuthRequestInterceptor implements RequestInterceptor {
HttpServletRequest request = WebUtils.getRequest().get();
// 避免请求参数的 query token 无法传递
String token = tokenResolver.resolve(request);
- if (StrUtil.isBlank(token)) {
+ if (StringUtils.isBlank(token)) {
return;
}
template.header(HttpHeaders.AUTHORIZATION,
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
index 3aac75ace6ff6d94eca6835af8faa213d8727fcf..9016c4dd47f4e37a848cad01ee5c9e4cb28becf6 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
@@ -17,12 +17,14 @@
package com.pig4cloud.pig.common.security.component;
import com.fasterxml.jackson.databind.ObjectMapper;
+import feign.RequestInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector;
+import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
/**
* @author lengleng
@@ -73,4 +75,14 @@ public class PigResourceServerAutoConfiguration {
return new PigCustomOpaqueTokenIntrospector(authorizationService);
}
+ /**
+ * 注入 oauth2 feign token 增强
+ * @param tokenResolver token获取处理器
+ * @return 拦截器
+ */
+ @Bean
+ public RequestInterceptor oauthRequestInterceptor(BearerTokenResolver tokenResolver) {
+ return new PigOAuthRequestInterceptor(tokenResolver);
+ }
+
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
index 4e5a2c296a14a951699af9458ee35aea06706767..c2ca9b80eaee21815e50a2ef4f25ee97d48e0e90 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
@@ -51,13 +51,20 @@ public class PigResourceServerConfiguration {
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests(authorizeRequests -> authorizeRequests
- .antMatchers(ArrayUtil.toArray(permitAllUrl.getUrls(), String.class)).permitAll().anyRequest()
- .authenticated())
- .oauth2ResourceServer(
- oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
- .authenticationEntryPoint(resourceAuthExceptionEntryPoint)
- .bearerTokenResolver(pigBearerTokenExtractor))
- .headers().frameOptions().disable().and().csrf().disable();
+ .antMatchers(ArrayUtil.toArray(permitAllUrl.getUrls(), String.class))
+ .permitAll()
+ .anyRequest()
+ .authenticated())
+ .oauth2ResourceServer(
+ oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
+ .authenticationEntryPoint(resourceAuthExceptionEntryPoint)
+ .bearerTokenResolver(pigBearerTokenExtractor))
+ .headers()
+ .frameOptions()
+ .disable()
+ .and()
+ .csrf()
+ .disable();
return http.build();
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
index ddae78468d3ca723b240edea7f3221668d07f423..6d55f61eb7e2b46b80dae1a82fb207c1a3c9f0ac 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
@@ -48,12 +48,13 @@ public class PigSecurityInnerAspect implements Ordered {
@Around("@within(inner) || @annotation(inner)")
public Object around(ProceedingJoinPoint point, Inner inner) {
// 实际注入的inner实体由表达式后一个注解决定,即是方法上的@Inner注解实体,若方法上无@Inner注解,则获取类上的
- if (inner == null) {
- Class> clazz = point.getTarget().getClass();
- inner = AnnotationUtils.findAnnotation(clazz, Inner.class);
- }
+ // 这段代码没有意义,拦截的就是@Inner注解,怎么会为null呢
+ // if (inner == null) {
+ // Class> clazz = point.getTarget().getClass();
+ // inner = AnnotationUtils.findAnnotation(clazz, Inner.class);
+ // }
String header = request.getHeader(SecurityConstants.FROM);
- if (inner.value() && !StrUtil.equals(SecurityConstants.FROM_IN, header)) {
+ if (inner.value() && !SecurityConstants.FROM_IN.equals(header)) {
log.warn("访问接口 {} 没有权限", point.getSignature().getName());
throw new AccessDeniedException("Access is denied");
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
index 64e9194010a6e225d6f93e2a0b308852a8a6ed64..df83102f87e5e6bf6fe5382b77485497bca0dff5 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
@@ -19,8 +19,8 @@ public class PigRedisOAuth2AuthorizationConsentService implements OAuth2Authoriz
public void save(OAuth2AuthorizationConsent authorizationConsent) {
Assert.notNull(authorizationConsent, "authorizationConsent cannot be null");
- redisTemplate.opsForValue().set(buildKey(authorizationConsent), authorizationConsent, TIMEOUT,
- TimeUnit.MINUTES);
+ redisTemplate.opsForValue()
+ .set(buildKey(authorizationConsent), authorizationConsent, TIMEOUT, TimeUnit.MINUTES);
}
@@ -35,7 +35,7 @@ public class PigRedisOAuth2AuthorizationConsentService implements OAuth2Authoriz
Assert.hasText(registeredClientId, "registeredClientId cannot be empty");
Assert.hasText(principalName, "principalName cannot be empty");
return (OAuth2AuthorizationConsent) redisTemplate.opsForValue()
- .get(buildKey(registeredClientId, principalName));
+ .get(buildKey(registeredClientId, principalName));
}
private static String buildKey(String registeredClientId, String principalName) {
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
index 7ba2a2255a6c7fba3b42fbbf8a7f622921f2fd27..db7c6b1b0353e0b2ae886703166489d5e014e281 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
@@ -37,37 +37,40 @@ public class PigRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
Assert.notNull(authorization, "authorization cannot be null");
if (isState(authorization)) {
- String token = authorization.getAttribute("state");
+ String token = authorization.getAttribute(OAuth2ParameterNames.STATE);
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.STATE, token), authorization, TIMEOUT,
- TimeUnit.MINUTES);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.STATE, token), authorization, TIMEOUT, TimeUnit.MINUTES);
}
if (isCode(authorization)) {
OAuth2Authorization.Token authorizationCode = authorization
- .getToken(OAuth2AuthorizationCode.class);
+ .getToken(OAuth2AuthorizationCode.class);
OAuth2AuthorizationCode authorizationCodeToken = authorizationCode.getToken();
long between = ChronoUnit.MINUTES.between(authorizationCodeToken.getIssuedAt(),
authorizationCodeToken.getExpiresAt());
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()),
- authorization, between, TimeUnit.MINUTES);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()), authorization,
+ between, TimeUnit.MINUTES);
}
if (isRefreshToken(authorization)) {
OAuth2RefreshToken refreshToken = authorization.getRefreshToken().getToken();
long between = ChronoUnit.SECONDS.between(refreshToken.getIssuedAt(), refreshToken.getExpiresAt());
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.REFRESH_TOKEN, refreshToken.getTokenValue()),
- authorization, between, TimeUnit.SECONDS);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.REFRESH_TOKEN, refreshToken.getTokenValue()), authorization, between,
+ TimeUnit.SECONDS);
}
if (isAccessToken(authorization)) {
OAuth2AccessToken accessToken = authorization.getAccessToken().getToken();
long between = ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt());
redisTemplate.setValueSerializer(RedisSerializer.java());
- redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()),
- authorization, between, TimeUnit.SECONDS);
+ redisTemplate.opsForValue()
+ .set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()), authorization, between,
+ TimeUnit.SECONDS);
}
}
@@ -77,13 +80,13 @@ public class PigRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
List keys = new ArrayList<>();
if (isState(authorization)) {
- String token = authorization.getAttribute("state");
+ String token = authorization.getAttribute(OAuth2ParameterNames.STATE);
keys.add(buildKey(OAuth2ParameterNames.STATE, token));
}
if (isCode(authorization)) {
OAuth2Authorization.Token authorizationCode = authorization
- .getToken(OAuth2AuthorizationCode.class);
+ .getToken(OAuth2AuthorizationCode.class);
OAuth2AuthorizationCode authorizationCodeToken = authorizationCode.getToken();
keys.add(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()));
}
@@ -120,12 +123,12 @@ public class PigRedisOAuth2AuthorizationService implements OAuth2AuthorizationSe
}
private static boolean isState(OAuth2Authorization authorization) {
- return Objects.nonNull(authorization.getAttribute("state"));
+ return Objects.nonNull(authorization.getAttribute(OAuth2ParameterNames.STATE));
}
private static boolean isCode(OAuth2Authorization authorization) {
OAuth2Authorization.Token authorizationCode = authorization
- .getToken(OAuth2AuthorizationCode.class);
+ .getToken(OAuth2AuthorizationCode.class);
return Objects.nonNull(authorizationCode);
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
index ee44bae16f4b7f817269f32298da27e9cd66ce27..65583c1e175f6e3718a124e9c32ca6eb35417fb0 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
@@ -87,38 +87,48 @@ public class PigRemoteRegisteredClientRepository implements RegisteredClientRepo
@Cacheable(value = CacheConstants.CLIENT_DETAILS_KEY, key = "#clientId", unless = "#result == null")
public RegisteredClient findByClientId(String clientId) {
- SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId)).getData()
- .orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
- new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
+ SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId))
+ .getData()
+ .orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
+ new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
RegisteredClient.Builder builder = RegisteredClient.withId(clientDetails.getClientId())
- .clientId(clientDetails.getClientId())
- .clientSecret(SecurityConstants.NOOP + clientDetails.getClientSecret())
- .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
+ .clientId(clientDetails.getClientId())
+ .clientSecret(SecurityConstants.NOOP + clientDetails.getClientSecret())
+ .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST)
+ .clientAuthenticationMethods(clientAuthenticationMethods -> {
+ clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
+ clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_POST);
+ });
// 授权模式
Optional.ofNullable(clientDetails.getAuthorizedGrantTypes())
- .ifPresent(grants -> StringUtils.commaDelimitedListToSet(grants)
- .forEach(s -> builder.authorizationGrantType(new AuthorizationGrantType(s))));
+ .ifPresent(grants -> StringUtils.commaDelimitedListToSet(grants)
+ .forEach(s -> builder.authorizationGrantType(new AuthorizationGrantType(s))));
// 回调地址
- Optional.ofNullable(clientDetails.getWebServerRedirectUri()).ifPresent(redirectUri -> Arrays
- .stream(redirectUri.split(StrUtil.COMMA)).filter(StrUtil::isNotBlank).forEach(builder::redirectUri));
+ Optional.ofNullable(clientDetails.getWebServerRedirectUri())
+ .ifPresent(redirectUri -> Arrays.stream(redirectUri.split(StrUtil.COMMA))
+ .filter(StrUtil::isNotBlank)
+ .forEach(builder::redirectUri));
// scope
- Optional.ofNullable(clientDetails.getScope()).ifPresent(
- scope -> Arrays.stream(scope.split(StrUtil.COMMA)).filter(StrUtil::isNotBlank).forEach(builder::scope));
+ Optional.ofNullable(clientDetails.getScope())
+ .ifPresent(scope -> Arrays.stream(scope.split(StrUtil.COMMA))
+ .filter(StrUtil::isNotBlank)
+ .forEach(builder::scope));
return builder
- .tokenSettings(TokenSettings.builder().accessTokenFormat(OAuth2TokenFormat.REFERENCE)
- .accessTokenTimeToLive(Duration.ofSeconds(Optional
- .ofNullable(clientDetails.getAccessTokenValidity()).orElse(accessTokenValiditySeconds)))
- .refreshTokenTimeToLive(
- Duration.ofSeconds(Optional.ofNullable(clientDetails.getRefreshTokenValidity())
- .orElse(refreshTokenValiditySeconds)))
- .build())
- .clientSettings(ClientSettings.builder()
- .requireAuthorizationConsent(!BooleanUtil.toBoolean(clientDetails.getAutoapprove())).build())
- .build();
+ .tokenSettings(TokenSettings.builder()
+ .accessTokenFormat(OAuth2TokenFormat.REFERENCE)
+ .accessTokenTimeToLive(Duration.ofSeconds(
+ Optional.ofNullable(clientDetails.getAccessTokenValidity()).orElse(accessTokenValiditySeconds)))
+ .refreshTokenTimeToLive(Duration.ofSeconds(Optional.ofNullable(clientDetails.getRefreshTokenValidity())
+ .orElse(refreshTokenValiditySeconds)))
+ .build())
+ .clientSettings(ClientSettings.builder()
+ .requireAuthorizationConsent(!BooleanUtil.toBoolean(clientDetails.getAutoapprove()))
+ .build())
+ .build();
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
index 36f48f9e81da48dda47ca12fb54ca780a140627f..723ac02daadeed39a31ba7d7a4a848efc143bf77 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
@@ -36,6 +36,8 @@ public class PigUser extends User implements OAuth2AuthenticatedPrincipal {
private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
+ private final Map attributes = new HashMap<>();
+
/**
* 用户ID
*/
@@ -71,7 +73,7 @@ public class PigUser extends User implements OAuth2AuthenticatedPrincipal {
*/
@Override
public Map getAttributes() {
- return new HashMap<>();
+ return this.attributes;
}
@Override
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
index 53202225ce7a15f607a0f2ff12577b032fb81c05..4b33f304b8b201b0b5f1642288d910b30a07c615 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
@@ -62,7 +62,7 @@ public interface PigUserDetailsService extends UserDetailsService, Ordered {
}
Collection authorities = AuthorityUtils
- .createAuthorityList(dbAuthsSet.toArray(new String[0]));
+ .createAuthorityList(dbAuthsSet.toArray(new String[0]));
SysUser user = info.getSysUser();
// 构造security用户
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
index 4ff9c03a44729b5db9f4383bf2d79e4c6301064e..017cf3f0ad715abfc2afa58362fdda3b7698caa5 100644
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
@@ -28,10 +28,8 @@ public class OAuth2EndpointUtils {
Map parameterMap = request.getParameterMap();
MultiValueMap parameters = new LinkedMultiValueMap<>(parameterMap.size());
parameterMap.forEach((key, values) -> {
- if (values.length > 0) {
- for (String value : values) {
- parameters.add(key, value);
- }
+ for (String value : values) {
+ parameters.add(key, value);
}
});
return parameters;
@@ -39,7 +37,7 @@ public class OAuth2EndpointUtils {
public boolean matchesPkceTokenRequest(HttpServletRequest request) {
return AuthorizationGrantType.AUTHORIZATION_CODE.getValue()
- .equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE))
+ .equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE))
&& request.getParameter(OAuth2ParameterNames.CODE) != null
&& request.getParameter(PkceParameterNames.CODE_VERIFIER) != null;
}
@@ -63,7 +61,8 @@ public class OAuth2EndpointUtils {
OAuth2RefreshToken refreshToken = authentication.getRefreshToken().getToken();
OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue())
- .tokenType(accessToken.getTokenType()).scopes(accessToken.getScopes());
+ .tokenType(accessToken.getTokenType())
+ .scopes(accessToken.getScopes());
if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
}
diff --git a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
index 292636ec9003c6e532b9ad632c2aeebe4ff86ec5..de5368e00179a10f8158c3b689bf84609318f16b 100755
--- a/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
+++ b/pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
@@ -16,6 +16,7 @@
package com.pig4cloud.pig.common.security.util;
+import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.security.service.PigUser;
@@ -74,11 +75,12 @@ public class SecurityUtils {
Collection extends GrantedAuthority> authorities = authentication.getAuthorities();
List roleIds = new ArrayList<>();
- authorities.stream().filter(granted -> StrUtil.startWith(granted.getAuthority(), SecurityConstants.ROLE))
- .forEach(granted -> {
- String id = StrUtil.removePrefix(granted.getAuthority(), SecurityConstants.ROLE);
- roleIds.add(Long.parseLong(id));
- });
+ authorities.stream()
+ .filter(granted -> CharSequenceUtil.startWith(granted.getAuthority(), SecurityConstants.ROLE))
+ .forEach(granted -> {
+ String id = CharSequenceUtil.removePrefix(granted.getAuthority(), SecurityConstants.ROLE);
+ roleIds.add(Long.parseLong(id));
+ });
return roleIds;
}
diff --git a/pig-common/pig-common-swagger/pom.xml b/pig-common/pig-common-swagger/pom.xml
index 854dad1981850d04bf285ecc1bca0f6222826aa1..500159851984565dfaa708d6c9c0d4ddebfa745d 100644
--- a/pig-common/pig-common-swagger/pom.xml
+++ b/pig-common/pig-common-swagger/pom.xml
@@ -24,7 +24,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-swagger
diff --git a/pig-common/pig-common-xss/pom.xml b/pig-common/pig-common-xss/pom.xml
index 495cfe2b0d07adc277bafd4dd7a0e7eba46a070d..615fd489d6a94fb58ebdef71e90d3a2f043891c5 100755
--- a/pig-common/pig-common-xss/pom.xml
+++ b/pig-common/pig-common-xss/pom.xml
@@ -6,7 +6,7 @@
com.pig4cloud
pig-common
- 3.6.4
+ 3.6.7
pig-common-xss
diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
index b5f7b88cb7d6bc38c5cdb252fb645691313d005e..2bf54e9b4b25c128d1c865983bc2040355c04bbc 100644
--- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
+++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
@@ -75,8 +75,10 @@ public class PigXssAutoConfiguration implements WebMvcConfigurer {
}
com.pig4cloud.pig.common.xss.core.XssCleanInterceptor interceptor = new com.pig4cloud.pig.common.xss.core.XssCleanInterceptor(
xssProperties);
- registry.addInterceptor(interceptor).addPathPatterns(patterns)
- .excludePathPatterns(xssProperties.getPathExcludePatterns()).order(Ordered.LOWEST_PRECEDENCE);
+ registry.addInterceptor(interceptor)
+ .addPathPatterns(patterns)
+ .excludePathPatterns(xssProperties.getPathExcludePatterns())
+ .order(Ordered.LOWEST_PRECEDENCE);
}
}
diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
index 338f2da314011f9a0a57d33c9e09e6e63de7ac1d..7be9a6ded4b35326064fba695ac4d77c5d695dbf 100644
--- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
+++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
@@ -40,10 +40,10 @@ public class DefaultXssCleaner implements XssCleaner {
private static Document.OutputSettings getOutputSettings(PigXssProperties properties) {
return new Document.OutputSettings()
- // 2. 转义,没找到关闭的方法,目前这个规则最少
- .escapeMode(Entities.EscapeMode.xhtml)
- // 3. 保留换行
- .prettyPrint(properties.isPrettyPrint());
+ // 2. 转义,没找到关闭的方法,目前这个规则最少
+ .escapeMode(Entities.EscapeMode.xhtml)
+ // 3. 保留换行
+ .prettyPrint(properties.isPrettyPrint());
}
@Override
diff --git a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
index 017b674945721b2c02265318d78bb4d31d20405b..128044e3662ac2a7a776785c04c49a2a76ecbe10 100644
--- a/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
+++ b/pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
@@ -23,6 +23,9 @@ package com.pig4cloud.pig.common.xss.core;
*/
public class XssHolder {
+ private XssHolder() {
+ }
+
private static final ThreadLocal TL = new ThreadLocal<>();
private static final ThreadLocal TL_IGNORE = new ThreadLocal<>();
diff --git a/pig-common/pom.xml b/pig-common/pom.xml
index 8c24c931cf5d05a9b4ef2a338edaf4ff1801c95a..15908dee575ff66780a7f6e44aa85fb16ed0922f 100755
--- a/pig-common/pom.xml
+++ b/pig-common/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-common
diff --git a/pig-gateway/pom.xml b/pig-gateway/pom.xml
index 7f625d7a15327f8b40d3fceb35154ea10574ca78..9e4ea2788b268cf1fe86e6754c4b8acf0d17be1c 100755
--- a/pig-gateway/pom.xml
+++ b/pig-gateway/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-gateway
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
index a3c595c790580fd4cd925e11d8dc1d1529f7371c..36cf7bf6cbc0a5b5363781ec36c464bd6caf189a 100755
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
@@ -38,8 +38,9 @@ public class RateLimiterConfiguration {
@Bean
public KeyResolver remoteAddrKeyResolver() {
return exchange -> Mono
- .just(Objects.requireNonNull(Objects.requireNonNull(exchange.getRequest().getRemoteAddress()))
- .getAddress().getHostAddress());
+ .just(Objects.requireNonNull(Objects.requireNonNull(exchange.getRequest().getRemoteAddress()))
+ .getAddress()
+ .getHostAddress());
}
}
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
index 16b3f658c1098aff816a2bd63e7573f919aed282..f432e1e6c8a339978e15fbe016334d32af7904dc 100755
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
@@ -65,8 +65,9 @@ public class PigRequestGlobalFilter implements GlobalFilter, Ordered {
// 2. 重写StripPrefix
addOriginalRequestUrl(exchange, request.getURI());
String rawPath = request.getURI().getRawPath();
- String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L)
- .collect(Collectors.joining("/"));
+ String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/"))
+ .skip(1L)
+ .collect(Collectors.joining("/"));
ServerHttpRequest newRequest = request.mutate().path(newPath).build();
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java
index e52e4c87b27480752ef7e0f61082af95093a4227..522d409343d118a1eed2ce05b6a119b24bb0761c 100644
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/SwaggerBasicGatewayFilter.java
@@ -68,7 +68,7 @@ public class SwaggerBasicGatewayFilter implements GlobalFilter {
String password = swaggerProperties.getBasic().getPassword();
String encodeToString = Base64Utils
- .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
+ .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
return auth.equals(BASIC_PREFIX + encodeToString);
}
diff --git a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java
index ee227a3dcba36ee8e19e644ad5cff66ee2fca3ce..d401497a1b9dbf9ad894b038dd195efa108095d6 100755
--- a/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java
+++ b/pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/ImageCodeHandler.java
@@ -59,15 +59,16 @@ public class ImageCodeHandler implements HandlerFunction {
// 保存验证码信息
Optional randomStr = serverRequest.queryParam("randomStr");
redisTemplate.setKeySerializer(new StringRedisSerializer());
- randomStr.ifPresent(s -> redisTemplate.opsForValue().set(CacheConstants.DEFAULT_CODE_KEY + s, result,
- SecurityConstants.CODE_TIME, TimeUnit.SECONDS));
+ randomStr.ifPresent(s -> redisTemplate.opsForValue()
+ .set(CacheConstants.DEFAULT_CODE_KEY + s, result, SecurityConstants.CODE_TIME, TimeUnit.SECONDS));
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
captcha.out(os);
- return ServerResponse.status(HttpStatus.OK).contentType(MediaType.IMAGE_JPEG)
- .body(BodyInserters.fromResource(new ByteArrayResource(os.toByteArray())));
+ return ServerResponse.status(HttpStatus.OK)
+ .contentType(MediaType.IMAGE_JPEG)
+ .body(BodyInserters.fromResource(new ByteArrayResource(os.toByteArray())));
}
}
diff --git a/pig-gateway/src/main/resources/application.yml b/pig-gateway/src/main/resources/application.yml
index 4e9e8bdf6376fd4b8c9db00432e7a0719c8193ca..c694dc1bafdd2e6a4833e8d69ca7f55b3cdc6583 100755
--- a/pig-gateway/src/main/resources/application.yml
+++ b/pig-gateway/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-register/pom.xml b/pig-register/pom.xml
index d5309be05a79bdcb18d4d4dbe23150b2e4a4b813..afed927c162b977a31a88fd4c28504ad58503361 100755
--- a/pig-register/pom.xml
+++ b/pig-register/pom.xml
@@ -18,7 +18,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-register
@@ -94,6 +94,7 @@
**/*.woff
**/*.woff2
**/*.ttf
+ **/*.eot
@@ -103,6 +104,7 @@
**/*.woff
**/*.woff2
**/*.ttf
+ **/*.eot
diff --git a/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java b/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java
index 74397f974d5be3a44af256a2338071ad528f76b5..42abdf46c422ead88a1bccb292a883c72e60fd5b 100755
--- a/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/PigNacosApplication.java
@@ -43,7 +43,7 @@ public class PigNacosApplication {
*/
private static boolean initEnv() {
System.setProperty(ConfigConstants.STANDALONE_MODE, "true");
- System.setProperty(ConfigConstants.AUTH_ENABLED, "false");
+ System.setProperty(ConfigConstants.AUTH_ENABLED, "true");
System.setProperty(ConfigConstants.LOG_BASEDIR, "logs");
System.setProperty(ConfigConstants.LOG_ENABLED, "false");
return true;
diff --git a/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java b/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java
index 7a3ec617d640bcfedaec633ab16088c31cbe6f65..b5dbe6e89392b96595f9f5045dc04619a77c0102 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/config/ConsoleConfig.java
@@ -16,6 +16,7 @@
package com.alibaba.nacos.config;
+import com.alibaba.nacos.console.filter.XssFilter;
import com.alibaba.nacos.core.code.ControllerMethodsCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
@@ -39,7 +40,7 @@ import java.time.ZoneId;
*/
@Component
@EnableScheduling
-@PropertySource("/application.properties")
+@PropertySource("/application.yml")
public class ConsoleConfig {
@Autowired
@@ -64,11 +65,17 @@ public class ConsoleConfig {
config.addAllowedHeader("*");
config.setMaxAge(18000L);
config.addAllowedMethod("*");
+ config.addAllowedOriginPattern("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
+ @Bean
+ public XssFilter xssFilter() {
+ return new XssFilter();
+ }
+
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(ZoneId.systemDefault().toString());
diff --git a/pig-register/src/main/java/com/alibaba/nacos/config/server/service/HistoryService.java b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/HistoryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..72a05665d637ec4664b03d736cc545f622b5eaa2
--- /dev/null
+++ b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/HistoryService.java
@@ -0,0 +1,88 @@
+package com.alibaba.nacos.config.server.service;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.nacos.common.utils.Pair;
+import com.alibaba.nacos.config.server.model.ConfigHistoryInfo;
+import com.alibaba.nacos.config.server.model.ConfigInfoWrapper;
+import com.alibaba.nacos.config.server.model.Page;
+import com.alibaba.nacos.config.server.service.repository.ConfigInfoPersistService;
+import com.alibaba.nacos.config.server.service.repository.HistoryConfigInfoPersistService;
+import com.alibaba.nacos.plugin.auth.exception.AccessException;
+import com.alibaba.nacos.plugin.encryption.handler.EncryptionHandler;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author aeizzz
+ */
+@Service
+public class HistoryService {
+
+ private final HistoryConfigInfoPersistService historyConfigInfoPersistService;
+
+ private final ConfigInfoPersistService configInfoPersistService;
+
+ public HistoryService(HistoryConfigInfoPersistService historyConfigInfoPersistService,
+ ConfigInfoPersistService configInfoPersistService) {
+ this.historyConfigInfoPersistService = historyConfigInfoPersistService;
+ this.configInfoPersistService = configInfoPersistService;
+ }
+
+ public Page listConfigHistory(String dataId, String group, String namespaceId, Integer pageNo,
+ Integer pageSize) {
+ return this.historyConfigInfoPersistService.findConfigHistory(dataId, group, namespaceId, pageNo, pageSize);
+ }
+
+ public ConfigHistoryInfo getConfigHistoryInfo(String dataId, String group, String namespaceId, Long nid)
+ throws AccessException {
+ ConfigHistoryInfo configHistoryInfo = this.historyConfigInfoPersistService.detailConfigHistory(nid);
+ if (Objects.isNull(configHistoryInfo)) {
+ return null;
+ }
+ else {
+ this.checkHistoryInfoPermission(configHistoryInfo, dataId, group, namespaceId);
+ String encryptedDataKey = configHistoryInfo.getEncryptedDataKey();
+ Pair pair = EncryptionHandler.decryptHandler(dataId, encryptedDataKey,
+ configHistoryInfo.getContent());
+ configHistoryInfo.setContent((String) pair.getSecond());
+ return configHistoryInfo;
+ }
+ }
+
+ public ConfigHistoryInfo getPreviousConfigHistoryInfo(String dataId, String group, String namespaceId, Long id)
+ throws AccessException {
+ ConfigHistoryInfo configHistoryInfo = this.historyConfigInfoPersistService.detailPreviousConfigHistory(id);
+ if (Objects.isNull(configHistoryInfo)) {
+ return null;
+ }
+ else {
+ this.checkHistoryInfoPermission(configHistoryInfo, dataId, group, namespaceId);
+ return configHistoryInfo;
+ }
+ }
+
+ public List getConfigListByNamespace(String namespaceId) {
+ return this.configInfoPersistService.queryConfigInfoByNamespace(namespaceId);
+ }
+
+ /**
+ * 覆盖原有的校验方式,oracle 数据库没有空 字符串 只有 null
+ * @param configHistoryInfo
+ * @param dataId
+ * @param group
+ * @param namespaceId
+ * @throws AccessException
+ */
+ private void checkHistoryInfoPermission(ConfigHistoryInfo configHistoryInfo, String dataId, String group,
+ String namespaceId) throws AccessException {
+ if (!Objects.equals(configHistoryInfo.getDataId(), dataId)
+ || !Objects.equals(configHistoryInfo.getGroup(), group)
+ || (!StrUtil.isEmpty(configHistoryInfo.getTenant())
+ && !Objects.equals(configHistoryInfo.getTenant(), namespaceId))) {
+ throw new AccessException("Please check dataId, group or namespaceId.");
+ }
+ }
+
+}
diff --git a/pig-register/src/main/java/com/alibaba/nacos/config/server/service/package-info.java b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3c747a1d663086d25cde4b3cf7852a8b82368ff
--- /dev/null
+++ b/pig-register/src/main/java/com/alibaba/nacos/config/server/service/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * 处理再oracle数据库下空置的判断
+ */
+package com.alibaba.nacos.config.server.service;
diff --git a/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java b/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java
index 6799a0bcecdc180013047e8e552040e999bb125d..2b088165de0b78d4e1bc027a9d7a572b2358e21d 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/console/controller/HealthController.java
@@ -77,7 +77,7 @@ public class HealthController {
if (!isConfigReadiness && !isNamingReadiness) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
- .body("Config and Naming are not in readiness");
+ .body("Config and Naming are not in readiness");
}
if (!isConfigReadiness) {
diff --git a/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java b/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java
index 9dd2b2f4a629c587065d73bf84baa3b6ef24b4af..8b0d6fbdfb4d043f08f807d24b872a3605445399 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/console/exception/ConsoleExceptionHandler.java
@@ -57,7 +57,7 @@ public class ConsoleExceptionHandler {
LOGGER.error("CONSOLE {}", uri, e);
if (uri.contains(Commons.NACOS_SERVER_VERSION_V2)) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
- .body(RestResultUtils.failed(ExceptionUtil.getAllExceptionMsg(e)));
+ .body(RestResultUtils.failed(ExceptionUtil.getAllExceptionMsg(e)));
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ExceptionUtil.getAllExceptionMsg(e));
}
diff --git a/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java b/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java
index c73e8f8e0a09b51f52e0c1299d24cf0d6865aba7..c704dd0f1a236eb3210185f45dd3c2f122ed3460 100644
--- a/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java
+++ b/pig-register/src/main/java/com/alibaba/nacos/console/exception/NacosApiExceptionHandler.java
@@ -59,7 +59,7 @@ public class NacosApiExceptionHandler {
public ResponseEntity> handleNacosApiException(NacosApiException e) {
LOGGER.error("got exception. {} {}", e.getErrAbstract(), e.getErrMsg());
return ResponseEntity.status(e.getErrCode())
- .body(new Result<>(e.getDetailErrCode(), e.getErrAbstract(), e.getErrMsg()));
+ .body(new Result<>(e.getDetailErrCode(), e.getErrAbstract(), e.getErrMsg()));
}
@ExceptionHandler(NacosException.class)
diff --git a/pig-register/src/main/resources/application.yml b/pig-register/src/main/resources/application.yml
index 60681dab9e5b6017ad2218b2f663071b3c21b8d2..58899527250fb0fb0918cd62aff2467be82ed6fd 100755
--- a/pig-register/src/main/resources/application.yml
+++ b/pig-register/src/main/resources/application.yml
@@ -2,6 +2,8 @@ server:
port: 8848 #如何修改 pig-register 启动端口 >: https://t.cn/A6XGvTdb
tomcat:
basedir: logs
+ error:
+ include-message: always
db:
num: 1
@@ -9,17 +11,20 @@ db:
password: ${MYSQL_PWD:root}
url:
0: jdbc:mysql://${MYSQL_HOST:pig-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pig_config}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
-
+ pool.config.connectionTimeout: 30000
nacos:
core:
auth:
+ server:
+ identity:
+ key: serverIdentity
+ value: security
plugin.nacos.token.secret.key: SecretKey012345678901234567890123456789012345678901234567890123456789
- enabled: false
system.type: nacos
security:
ignore:
- urls: /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
+ urls: /actuator/**,/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
spring:
datasource:
diff --git a/pig-upms/pig-upms-api/pom.xml b/pig-upms/pig-upms-api/pom.xml
index 03c66e106ded4f295e16a1854dc0a86d6bb88054..9fae9627625b510331d6b003aafce1a2a81244d3 100755
--- a/pig-upms/pig-upms-api/pom.xml
+++ b/pig-upms/pig-upms-api/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-upms
- 3.6.4
+ 3.6.7
pig-upms-api
@@ -43,8 +43,8 @@
- org.springframework.cloud
- spring-cloud-openfeign-core
+ com.pig4cloud
+ pig-common-feign
true
diff --git a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
index 3dfc3f084a87acd1cade03a430478bba1a69956b..0af6d9ba570747f38c7facd78e992b90e97b6193 100755
--- a/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
+++ b/pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
@@ -46,7 +46,6 @@ public interface RemoteUserService {
/**
* 通过手机号码查询用户、角色信息
* @param phone 手机号码
- * @param from 调用标志
* @return R
*/
@GetMapping(value = "/app/info/{phone}", headers = SecurityConstants.HEADER_FROM_IN)
@@ -55,7 +54,6 @@ public interface RemoteUserService {
/**
* 根据部门id,查询对应的用户 id 集合
* @param deptIds 部门id 集合
- * @param from 调用标志
* @return 用户 id 集合
*/
@GetMapping(value = "/user/ids", headers = SecurityConstants.HEADER_FROM_IN)
diff --git a/pig-upms/pig-upms-biz/pom.xml b/pig-upms/pig-upms-biz/pom.xml
index a3652ff2be98ce35a484cb7b9b39d82b199f0cf9..ce53f69edaf8e92951710d056265b40eb67b50fd 100644
--- a/pig-upms/pig-upms-biz/pom.xml
+++ b/pig-upms/pig-upms-biz/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-upms
- 3.6.4
+ 3.6.7
pig-upms-biz
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DeptController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
similarity index 94%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DeptController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
index 23bd6dca5a088a4722614f2ab9547e09f660a0b8..c0e4a2bd2922da58db9aaf47137b3bfb1c146344 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DeptController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
@@ -45,7 +45,7 @@ import java.util.List;
@RequestMapping("/dept")
@Tag(name = "部门管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class DeptController {
+public class SysDeptController {
private final SysDeptService sysDeptService;
@@ -115,13 +115,13 @@ public class DeptController {
/**
* 根据部门名查询部门信息
- * @param deptname 部门名
- * @return
+ * @param deptName 部门名
+ * @return SysDept
*/
- @GetMapping("/details/{deptname}")
- public R user(@PathVariable String deptname) {
+ @GetMapping("/details/{deptName}")
+ public R user(@PathVariable String deptName) {
SysDept condition = new SysDept();
- condition.setName(deptname);
+ condition.setName(deptName);
return R.ok(sysDeptService.getOne(new QueryWrapper<>(condition)));
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DictController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
similarity index 97%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DictController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
index 3c3623542621eed6929f82f3aa3470717dc4fc3c..c9b10d1c34bd61f05a3fc9ccbb3a9d206405e785 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/DictController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
@@ -52,7 +52,7 @@ import java.util.List;
@RequestMapping("/dict")
@Tag(name = "字典管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class DictController {
+public class SysDictController {
private final SysDictItemService sysDictItemService;
@@ -76,12 +76,12 @@ public class DictController {
@GetMapping("/page")
public R> getDictPage(Page page, SysDict sysDict) {
return R.ok(sysDictService.page(page, Wrappers.lambdaQuery()
- .like(StrUtil.isNotBlank(sysDict.getDictKey()), SysDict::getDictKey, sysDict.getDictKey())));
+ .like(StrUtil.isNotBlank(sysDict.getDictKey()), SysDict::getDictKey, sysDict.getDictKey())));
}
/**
* 通过字典类型查找字典
- * @param type 类型
+ * @param key 类型
* @return 同类型字典
*/
@GetMapping("/key/{key}")
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/FileController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
similarity index 97%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/FileController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
index 96154d68d8c0bb9219f596df63f30a72aa2858ea..59ed986841849ad29d1a2871e2c114e397fd0cab 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/FileController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
@@ -51,7 +51,7 @@ import javax.servlet.http.HttpServletResponse;
@RequestMapping("/sys-file")
@Tag(name = "文件管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class FileController {
+public class SysFileController {
private final SysFileService sysFileService;
@@ -65,7 +65,7 @@ public class FileController {
@GetMapping("/page")
public R> getSysFilePage(Page page, SysFile sysFile) {
return R.ok(sysFileService.page(page, Wrappers.lambdaQuery()
- .like(StrUtil.isNotBlank(sysFile.getFileName()), SysFile::getFileName, sysFile.getFileName())));
+ .like(StrUtil.isNotBlank(sysFile.getFileName()), SysFile::getFileName, sysFile.getFileName())));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/LogController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
similarity index 98%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/LogController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
index ff8c7f25f78c49df342295a3489271234e98ed9d..f33d031dc39cb5f9471c021014d1dda54debc5b4 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/LogController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
@@ -46,7 +46,7 @@ import java.util.List;
@RequestMapping("/log")
@Tag(name = "日志管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class LogController {
+public class SysLogController {
private final SysLogService sysLogService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/MenuController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
similarity index 92%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/MenuController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
index 31d7c96815d98a137cbfc68e0a90c1584bb13b4e..6b9e057e2ff4f01fb7a5e5182bf3bbecdfabb2f9 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/MenuController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
@@ -44,7 +44,7 @@ import java.util.stream.Collectors;
@RequestMapping("/menu")
@Tag(name = "菜单管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class MenuController {
+public class SysMenuController {
private final SysMenuService sysMenuService;
@@ -56,8 +56,11 @@ public class MenuController {
@GetMapping
public R>> getUserMenu(Long parentId) {
// 获取符合条件的菜单
- Set menuSet = SecurityUtils.getRoles().stream().map(sysMenuService::findMenuByRoleId)
- .flatMap(Collection::stream).collect(Collectors.toSet());
+ Set menuSet = SecurityUtils.getRoles()
+ .stream()
+ .map(sysMenuService::findMenuByRoleId)
+ .flatMap(Collection::stream)
+ .collect(Collectors.toSet());
return R.ok(sysMenuService.filterMenu(menuSet, parentId));
}
@@ -79,8 +82,8 @@ public class MenuController {
*/
@GetMapping("/tree/{roleId}")
public R> getRoleTree(@PathVariable Long roleId) {
- return R.ok(
- sysMenuService.findMenuByRoleId(roleId).stream().map(SysMenu::getMenuId).collect(Collectors.toList()));
+ return R
+ .ok(sysMenuService.findMenuByRoleId(roleId).stream().map(SysMenu::getMenuId).collect(Collectors.toList()));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/OauthClientDetailsController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysOauthClientDetailsController.java
similarity index 96%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/OauthClientDetailsController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysOauthClientDetailsController.java
index e21bfc6e47e077ace60c1f84ff39ecc68c675ad5..d01aad333afa331e772d02b507adf7137ffbf7ed 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/OauthClientDetailsController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysOauthClientDetailsController.java
@@ -47,7 +47,7 @@ import java.util.List;
@RequestMapping("/client")
@Tag(name = "客户端管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class OauthClientDetailsController {
+public class SysOauthClientDetailsController {
private final SysOauthClientDetailsService sysOauthClientDetailsService;
@@ -59,7 +59,7 @@ public class OauthClientDetailsController {
@GetMapping("/{clientId}")
public R> getByClientId(@PathVariable String clientId) {
return R.ok(sysOauthClientDetailsService
- .list(Wrappers.lambdaQuery().eq(SysOauthClientDetails::getClientId, clientId)));
+ .list(Wrappers.lambdaQuery().eq(SysOauthClientDetails::getClientId, clientId)));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PostController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
similarity index 99%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PostController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
index e2ed6c0ee6bb5f4d55d87bda3f56d6b55fe8ebd4..b8bffb48d492861a31b9a5599fad7f57b6c90db0 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PostController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
@@ -46,7 +46,7 @@ import java.util.List;
@RequestMapping("/post")
@Tag(name = "岗位管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class PostController {
+public class SysPostController {
private final SysPostService sysPostService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PublicParamController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
similarity index 93%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PublicParamController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
index b9e23f77f19078e36c1c5b354a590425fed4d15f..b397571816ccf43f012cddb261406579409493ca 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/PublicParamController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
@@ -44,7 +44,7 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/param")
@Tag(name = "公共参数配置")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class PublicParamController {
+public class SysPublicParamController {
private final SysPublicParamService sysPublicParamService;
@@ -71,10 +71,10 @@ public class PublicParamController {
public R getSysPublicParamPage(Page page, SysPublicParam sysPublicParam) {
return R.ok(sysPublicParamService.page(page,
Wrappers.lambdaQuery()
- .like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
- sysPublicParam.getPublicName())
- .like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
- sysPublicParam.getPublicKey())));
+ .like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
+ sysPublicParam.getPublicName())
+ .like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
+ sysPublicParam.getPublicKey())));
}
/**
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RegisterController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
similarity index 97%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RegisterController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
index a5a0ab4920aaf8fbfdf0a2f3bb89e44c89b87d1a..8ee36fec990e86e5d04c3c29d9d8b9bcc8d62b55 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RegisterController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/register")
@RequiredArgsConstructor
@ConditionalOnProperty(name = "register.user", matchIfMissing = true)
-public class RegisterController {
+public class SysRegisterController {
private final SysUserService userService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RoleController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
similarity index 99%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RoleController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
index 570ac8c61a90a2f4b713fa163a5d750148384900..fc657136f7b7dce1fa2c82fe93c2857e8595147e 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/RoleController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
@@ -48,7 +48,7 @@ import java.util.List;
@RequestMapping("/role")
@Tag(name = "角色管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class RoleController {
+public class SysRoleController {
private final SysRoleService sysRoleService;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/UserController.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
similarity index 98%
rename from pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/UserController.java
rename to pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
index ec4be7a18178ca233356d1af8a7dbb45f66a942c..ae65ff8f86c9c2f9f891fcfa6c3ee7782c4a3d7b 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/UserController.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
@@ -58,7 +58,7 @@ import java.util.Set;
@RequestMapping("/user")
@Tag(name = "用户管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
-public class UserController {
+public class SysUserController {
private final SysUserService userService;
@@ -122,8 +122,8 @@ public class UserController {
* @return
*/
@Inner(false)
- @GetMapping("/check/exsit")
- public R isExsit(UserDTO userDTO) {
+ @GetMapping("/check/exist")
+ public R isExist(UserDTO userDTO) {
List sysUserList = userService.list(new QueryWrapper<>(userDTO));
if (CollUtil.isNotEmpty(sysUserList)) {
return R.ok(Boolean.TRUE, MsgUtils.getMessage(ErrorCodes.SYS_USER_EXISTING));
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java
index 01e81a90d1020e1e3ba08106bc8fd11618cfb6db..a68246b54a40a2b498c47a753bbb555e9dabca32 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/AppServiceImpl.java
@@ -76,8 +76,8 @@ public class AppServiceImpl implements AppService {
String code = RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE));
log.info("手机号生成验证码成功:{},{}", sms.getPhone(), code);
- redisTemplate.opsForValue().set(CacheConstants.DEFAULT_CODE_KEY + sms.getPhone(), code,
- SecurityConstants.CODE_TIME, TimeUnit.SECONDS);
+ redisTemplate.opsForValue()
+ .set(CacheConstants.DEFAULT_CODE_KEY + sms.getPhone(), code, SecurityConstants.CODE_TIME, TimeUnit.SECONDS);
// 调用短信通道发送
this.smsClient.sendCode(code, sms.getPhone());
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java
index f777a5858175c2394d02aa8fb52627c70add684d..3f077e3db7e27dcc7faf97ae5dcf7a8fa128d267 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptRelationServiceImpl.java
@@ -55,10 +55,12 @@ public class SysDeptRelationServiceImpl extends ServiceImpl relationList = sysDeptRelationMapper.selectList(
Wrappers.query().lambda().eq(SysDeptRelation::getDescendant, sysDept.getParentId()))
- .stream().map(relation -> {
- relation.setDescendant(sysDept.getDeptId());
- return relation;
- }).collect(Collectors.toList());
+ .stream()
+ .map(relation -> {
+ relation.setDescendant(sysDept.getDeptId());
+ return relation;
+ })
+ .collect(Collectors.toList());
if (CollUtil.isNotEmpty(relationList)) {
this.saveBatch(relationList);
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
index 029b3e81fadc8f012579bdb54e67bf6bd08c3170..ade640ef2be79bfd765f5669b6c19bb7d0c5cdf8 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
@@ -29,7 +29,6 @@ import com.pig4cloud.pig.admin.service.SysDeptRelationService;
import com.pig4cloud.pig.admin.service.SysDeptService;
import com.pig4cloud.pig.common.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -58,10 +57,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveDept(SysDept dept) {
- SysDept sysDept = new SysDept();
- BeanUtils.copyProperties(dept, sysDept);
- this.save(sysDept);
- sysDeptRelationService.saveDeptRelation(sysDept);
+ this.save(dept);
+ sysDeptRelationService.saveDeptRelation(dept);
return Boolean.TRUE;
}
@@ -75,8 +72,10 @@ public class SysDeptServiceImpl extends ServiceImpl impl
public Boolean removeDeptById(Long id) {
// 级联删除部门
List idList = sysDeptRelationService
- .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, id)).stream()
- .map(SysDeptRelation::getDescendant).collect(Collectors.toList());
+ .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, id))
+ .stream()
+ .map(SysDeptRelation::getDescendant)
+ .collect(Collectors.toList());
if (CollUtil.isNotEmpty(idList)) {
this.removeByIds(idList);
@@ -108,7 +107,8 @@ public class SysDeptServiceImpl extends ServiceImpl impl
@Override
public List listChildDeptId(Long deptId) {
List deptRelations = sysDeptRelationService.list(Wrappers.lambdaQuery()
- .eq(SysDeptRelation::getAncestor, deptId).ne(SysDeptRelation::getDescendant, deptId));
+ .eq(SysDeptRelation::getAncestor, deptId)
+ .ne(SysDeptRelation::getDescendant, deptId));
if (CollUtil.isNotEmpty(deptRelations)) {
return deptRelations.stream().map(SysDeptRelation::getDescendant).collect(Collectors.toList());
}
@@ -132,8 +132,10 @@ public class SysDeptServiceImpl extends ServiceImpl impl
public List> listCurrentUserDeptTrees() {
Long deptId = SecurityUtils.getUser().getDeptId();
List descendantIdList = sysDeptRelationService
- .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, deptId)).stream()
- .map(SysDeptRelation::getDescendant).collect(Collectors.toList());
+ .list(Wrappers.query().lambda().eq(SysDeptRelation::getAncestor, deptId))
+ .stream()
+ .map(SysDeptRelation::getDescendant)
+ .collect(Collectors.toList());
List deptList = baseMapper.selectBatchIds(descendantIdList);
Optional dept = deptList.stream().filter(item -> item.getDeptId().intValue() == deptId).findFirst();
@@ -147,19 +149,22 @@ public class SysDeptServiceImpl extends ServiceImpl impl
* @return
*/
private List> getDeptTree(List depts, Long parentId) {
- List> collect = depts.stream().filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
- .sorted(Comparator.comparingInt(SysDept::getSortOrder)).map(dept -> {
- TreeNode treeNode = new TreeNode();
- treeNode.setId(dept.getDeptId());
- treeNode.setParentId(dept.getParentId());
- treeNode.setName(dept.getName());
- treeNode.setWeight(dept.getSortOrder());
- // 扩展属性
- Map extra = new HashMap<>(4);
- extra.put("createTime", dept.getCreateTime());
- treeNode.setExtra(extra);
- return treeNode;
- }).collect(Collectors.toList());
+ List> collect = depts.stream()
+ .filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
+ .sorted(Comparator.comparingInt(SysDept::getSortOrder))
+ .map(dept -> {
+ TreeNode treeNode = new TreeNode();
+ treeNode.setId(dept.getDeptId());
+ treeNode.setParentId(dept.getParentId());
+ treeNode.setName(dept.getName());
+ treeNode.setWeight(dept.getSortOrder());
+ // 扩展属性
+ Map extra = new HashMap<>(2);
+ extra.put("createTime", dept.getCreateTime());
+ treeNode.setExtra(extra);
+ return treeNode;
+ })
+ .collect(Collectors.toList());
return TreeUtil.build(collect, parentId);
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java
index 8934e827754157d6b3084a9051d9459ce92a670c..487ddb5f07aba420a0dca1b15214f84f3e109269 100755
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java
@@ -67,7 +67,7 @@ public class SysDictServiceImpl extends ServiceImpl impl
* @return
*/
@Override
- @CacheEvict(value = CacheConstants.DICT_DETAILS, key = "#dict.type")
+ @CacheEvict(value = CacheConstants.DICT_DETAILS, key = "#dict.dictKey")
public void updateDict(SysDict dict) {
SysDict sysDict = this.getById(dict.getId());
// 系统内置
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
index a88639f792494c2d755d7553e8a8657d2150c6bb..eb04d3f62f1b1a3372337a53825ef4f743bd0b7b 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
@@ -63,12 +63,12 @@ public class SysLogServiceImpl extends ServiceImpl impleme
*/
private LambdaQueryWrapper buildQueryWrapper(SysLogDTO sysLog) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery()
- .eq(StrUtil.isNotBlank(sysLog.getType()), SysLog::getType, sysLog.getType())
- .like(StrUtil.isNotBlank(sysLog.getRemoteAddr()), SysLog::getRemoteAddr, sysLog.getRemoteAddr());
+ .eq(StrUtil.isNotBlank(sysLog.getType()), SysLog::getType, sysLog.getType())
+ .like(StrUtil.isNotBlank(sysLog.getRemoteAddr()), SysLog::getRemoteAddr, sysLog.getRemoteAddr());
if (ArrayUtil.isNotEmpty(sysLog.getCreateTime())) {
- wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTime()[0]).le(SysLog::getCreateTime,
- sysLog.getCreateTime()[1]);
+ wrapper.ge(SysLog::getCreateTime, sysLog.getCreateTime()[0])
+ .le(SysLog::getCreateTime, sysLog.getCreateTime()[1]);
}
return wrapper;
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
index 3eff49c585f828932bf64211d14ea60612182dd5..22663d06aa1e555b8144c9054e6b0970d425c65a 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
@@ -103,8 +103,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl
public List> treeMenu(boolean lazy, Long parentId) {
if (!lazy) {
List> collect = baseMapper
- .selectList(Wrappers.lambdaQuery().orderByAsc(SysMenu::getSortOrder)).stream()
- .map(getNodeFunction()).collect(Collectors.toList());
+ .selectList(Wrappers.lambdaQuery().orderByAsc(SysMenu::getSortOrder))
+ .stream()
+ .map(getNodeFunction())
+ .collect(Collectors.toList());
return TreeUtil.build(collect, CommonConstants.MENU_TREE_ROOT_ID);
}
@@ -112,9 +114,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl
Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
List> collect = baseMapper
- .selectList(Wrappers.lambdaQuery().eq(SysMenu::getParentId, parent)
- .orderByAsc(SysMenu::getSortOrder))
- .stream().map(getNodeFunction()).collect(Collectors.toList());
+ .selectList(
+ Wrappers.lambdaQuery().eq(SysMenu::getParentId, parent).orderByAsc(SysMenu::getSortOrder))
+ .stream()
+ .map(getNodeFunction())
+ .collect(Collectors.toList());
return TreeUtil.build(collect, parent);
}
@@ -128,8 +132,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl
@Override
public List> filterMenu(Set all, Long parentId) {
List> collect = all.stream()
- .filter(menu -> MenuTypeEnum.LEFT_MENU.getType().equals(menu.getType()))
- .filter(menu -> StrUtil.isNotBlank(menu.getPath())).map(getNodeFunction()).collect(Collectors.toList());
+ .filter(menu -> MenuTypeEnum.LEFT_MENU.getType().equals(menu.getType()))
+ .filter(menu -> StrUtil.isNotBlank(menu.getPath()))
+ .map(getNodeFunction())
+ .collect(Collectors.toList());
Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
return TreeUtil.build(collect, parent);
}
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
index b2231106e898779f7b1c3f0b386b48f605097510..925996a2e5cc6a9bf61cc60785c1e0e7ecbe5b6f 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
@@ -63,8 +63,9 @@ public class SysPostServiceImpl extends ServiceImpl impl
for (PostExcelVO excel : excelVOList) {
Set errorMsg = new HashSet<>();
// 检验岗位名称或者岗位编码是否存在
- boolean existPost = postList.stream().anyMatch(post -> excel.getPostName().equals(post.getPostName())
- || excel.getPostCode().equals(post.getPostCode()));
+ boolean existPost = postList.stream()
+ .anyMatch(post -> excel.getPostName().equals(post.getPostName())
+ || excel.getPostCode().equals(post.getPostCode()));
if (existPost) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_NAMEORCODE_EXISTING, excel.getPostName(),
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
index 7f9a373667584e5c03a0b7af49fc7af4eba6cef4..677065fd54b4070e690fb09fb929bdd90330a697 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
@@ -47,7 +47,7 @@ public class SysPublicParamServiceImpl extends ServiceImpllambdaQuery().eq(SysPublicParam::getPublicKey, publicKey));
+ .selectOne(Wrappers.lambdaQuery().eq(SysPublicParam::getPublicKey, publicKey));
if (sysPublicParam != null) {
return sysPublicParam.getPublicValue();
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
index 3d6c9f6f2a9839bfca6a8762e608f14754ce8a57..3af802c0ae490c86a9725c453bfb77a1a7ff445b 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
@@ -87,8 +87,9 @@ public class SysRoleServiceImpl extends ServiceImpl impl
for (RoleExcelVO excel : excelVOList) {
Set errorMsg = new HashSet<>();
// 检验角色名称或者角色编码是否存在
- boolean existRole = roleList.stream().anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
- || excel.getRoleCode().equals(sysRole.getRoleCode()));
+ boolean existRole = roleList.stream()
+ .anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
+ || excel.getRoleCode().equals(sysRole.getRoleCode()));
if (existRole) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(),
diff --git a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
index b2b40166c7d483b0fc637066151bee8e294146c8..136739bddf7f0001d2aa33af63f21ae77e3b523e 100644
--- a/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
+++ b/pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
@@ -130,9 +130,13 @@ public class SysUserServiceImpl extends ServiceImpl impl
List postList = sysPostMapper.listPostsByUserId(sysUser.getUserId());
userInfo.setPostList(postList);
// 设置权限列表(menu.permission)
- Set permissions = roleIds.stream().map(sysMenuService::findMenuByRoleId).flatMap(Collection::stream)
- .filter(m -> MenuTypeEnum.BUTTON.getType().equals(m.getType())).map(SysMenu::getPermission)
- .filter(StrUtil::isNotBlank).collect(Collectors.toSet());
+ Set permissions = roleIds.stream()
+ .map(sysMenuService::findMenuByRoleId)
+ .flatMap(Collection::stream)
+ .filter(m -> MenuTypeEnum.BUTTON.getType().equals(m.getType()))
+ .map(SysMenu::getPermission)
+ .filter(StrUtil::isNotBlank)
+ .collect(Collectors.toSet());
userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class));
return userInfo;
@@ -213,7 +217,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
this.updateById(sysUser);
sysUserRoleMapper
- .delete(Wrappers.update().lambda().eq(SysUserRole::getUserId, userDto.getUserId()));
+ .delete(Wrappers.update().lambda().eq(SysUserRole::getUserId, userDto.getUserId()));
userDto.getRole().forEach(roleId -> {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(sysUser.getUserId());
@@ -260,11 +264,15 @@ public class SysUserServiceImpl extends ServiceImpl impl
List userExcelVOList = voList.stream().map(userVO -> {
UserExcelVO excelVO = new UserExcelVO();
BeanUtils.copyProperties(userVO, excelVO);
- String roleNameList = userVO.getRoleList().stream().map(SysRole::getRoleName)
- .collect(Collectors.joining(StrUtil.COMMA));
+ String roleNameList = userVO.getRoleList()
+ .stream()
+ .map(SysRole::getRoleName)
+ .collect(Collectors.joining(StrUtil.COMMA));
excelVO.setRoleNameList(roleNameList);
- String postNameList = userVO.getPostList().stream().map(SysPost::getPostName)
- .collect(Collectors.joining(StrUtil.COMMA));
+ String postNameList = userVO.getPostList()
+ .stream()
+ .map(SysPost::getPostName)
+ .collect(Collectors.joining(StrUtil.COMMA));
excelVO.setPostNameList(postNameList);
return excelVO;
}).collect(Collectors.toList());
@@ -292,16 +300,17 @@ public class SysUserServiceImpl extends ServiceImpl impl
for (UserExcelVO excel : excelVOList) {
Set errorMsg = new HashSet<>();
// 校验用户名是否存在
- boolean exsitUserName = userList.stream()
- .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
+ boolean existUserName = userList.stream()
+ .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
- if (exsitUserName) {
+ if (existUserName) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
}
// 判断输入的部门名称列表是否合法
Optional deptOptional = deptList.stream()
- .filter(dept -> excel.getDeptName().equals(dept.getName())).findFirst();
+ .filter(dept -> excel.getDeptName().equals(dept.getName()))
+ .findFirst();
if (!deptOptional.isPresent()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName()));
}
@@ -309,8 +318,8 @@ public class SysUserServiceImpl extends ServiceImpl impl
// 判断输入的角色名称列表是否合法
List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
List roleCollList = roleList.stream()
- .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
- .collect(Collectors.toList());
+ .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
+ .collect(Collectors.toList());
if (roleCollList.size() != roleNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
@@ -319,8 +328,8 @@ public class SysUserServiceImpl extends ServiceImpl impl
// 判断输入的岗位名称列表是否合法
List postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA);
List postCollList = postList.stream()
- .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
- .collect(Collectors.toList());
+ .filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
+ .collect(Collectors.toList());
if (postCollList.size() != postNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList()));
@@ -393,7 +402,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
// 默认角色
SysRole sysRole = sysRoleMapper
- .selectOne(Wrappers.lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
+ .selectOne(Wrappers.lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
if (sysRole == null) {
return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_PARAM_CONFIG_ERROR, "USER_DEFAULT_ROLE"));
diff --git a/pig-upms/pig-upms-biz/src/main/resources/application.yml b/pig-upms/pig-upms-biz/src/main/resources/application.yml
index 7528a4fa80fba135b7cd75a8ba3e966f1d83d09c..d3da88fc3a92307ec651d760574839fb2aecfdad 100644
--- a/pig-upms/pig-upms-biz/src/main/resources/application.yml
+++ b/pig-upms/pig-upms-biz/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-upms/pom.xml b/pig-upms/pom.xml
index a5994580b570bb1bf709237068120017e9c2d207..629b8138d0854a8f71d05fe009900ebcc2da8b35 100755
--- a/pig-upms/pom.xml
+++ b/pig-upms/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-upms
diff --git a/pig-visual/pig-codegen/pom.xml b/pig-visual/pig-codegen/pom.xml
index d5cadd48517d5efd637a6671357cba5657611d5f..6c5ebb1ec36cb33d4b06fb8af36da59d6c792ff9 100755
--- a/pig-visual/pig-codegen/pom.xml
+++ b/pig-visual/pig-codegen/pom.xml
@@ -22,7 +22,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-codegen
diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
index 7f3d5d2ebb9cd644f7fd9bd5d76cc43b7922a3ad..8dc7da320ea6994f80fe9392336900406b755ee8 100755
--- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
+++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
@@ -82,7 +82,7 @@ public class GenDatasourceConfServiceImpl extends ServiceImpllambdaQuery().eq(GenFormConf::getTableName, tableName)
- .orderByDesc(GenFormConf::getCreateTime), false);
+ GenFormConf form = getOne(Wrappers.lambdaQuery()
+ .eq(GenFormConf::getTableName, tableName)
+ .orderByDesc(GenFormConf::getCreateTime), false);
if (form != null) {
return form.getFormInfo();
diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
index 94b901bf9e72eb0032ba13c58d7d6bc5ae1bc676..9d65392a97f2c22fd5ab5258fbc1a9ba9654a2a2 100755
--- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
+++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
@@ -77,7 +77,8 @@ public class GeneratorServiceImpl implements GeneratorService {
public Map previewCode(GenConfig genConfig) {
// 根据tableName 查询最新的表单配置
List formConfList = genFormConfMapper.selectList(Wrappers.lambdaQuery()
- .eq(GenFormConf::getTableName, genConfig.getTableName()).orderByDesc(GenFormConf::getCreateTime));
+ .eq(GenFormConf::getTableName, genConfig.getTableName())
+ .orderByDesc(GenFormConf::getCreateTime));
String tableNames = genConfig.getTableName();
String dsName = genConfig.getDsName();
@@ -111,7 +112,8 @@ public class GeneratorServiceImpl implements GeneratorService {
public byte[] generatorCode(GenConfig genConfig) {
// 根据tableName 查询最新的表单配置
List formConfList = genFormConfMapper.selectList(Wrappers.lambdaQuery()
- .eq(GenFormConf::getTableName, genConfig.getTableName()).orderByDesc(GenFormConf::getCreateTime));
+ .eq(GenFormConf::getTableName, genConfig.getTableName())
+ .orderByDesc(GenFormConf::getCreateTime));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
diff --git a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
index de5a7ffd285215991e18bc97c39ed703b6b59933..3de92f7c14a942f2b495632db46780abfb617299 100644
--- a/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
+++ b/pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
@@ -36,8 +36,11 @@ public enum StyleTypeEnum {
private String description;
public static String getDecs(String style) {
- return Arrays.stream(StyleTypeEnum.values()).filter(styleTypeEnum -> styleTypeEnum.getStyle().equals(style))
- .findFirst().orElse(ELEMENT).getDescription();
+ return Arrays.stream(StyleTypeEnum.values())
+ .filter(styleTypeEnum -> styleTypeEnum.getStyle().equals(style))
+ .findFirst()
+ .orElse(ELEMENT)
+ .getDescription();
}
}
diff --git a/pig-visual/pig-codegen/src/main/resources/application.yml b/pig-visual/pig-codegen/src/main/resources/application.yml
index 3a87b84885733cb1e37dc5c94db769a8e2cff6de..a21122e311ac9c2fbefa2bc2ad48136e5e35b812 100644
--- a/pig-visual/pig-codegen/src/main/resources/application.yml
+++ b/pig-visual/pig-codegen/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-visual/pig-codegen/src/main/resources/mapper/GeneratorMapper.xml b/pig-visual/pig-codegen/src/main/resources/mapper/GeneratorMapper.xml
index f226b6fb0a53ebb319529952d48d282b6b2fe4f2..e4b38b5d9e3e615d0fa32db5d01badf6875c3220 100755
--- a/pig-visual/pig-codegen/src/main/resources/mapper/GeneratorMapper.xml
+++ b/pig-visual/pig-codegen/src/main/resources/mapper/GeneratorMapper.xml
@@ -22,7 +22,8 @@
select table_name tableName, engine, table_comment tableComment, table_collation tableCollation, create_time createTime from information_schema.tables
where table_schema = (select database())
- and table_name like concat('%', #{tableName}, '%')
+
+ and table_name like #{tableNameLike}
order by create_time desc
diff --git a/pig-visual/pig-monitor/pom.xml b/pig-visual/pig-monitor/pom.xml
index e643f3cf14f99ecd755f2538b1ed49c234d0ecb4..1be8a1170cbf3be7d1ef5fc9b4f86ad9ff5a74b6 100755
--- a/pig-visual/pig-monitor/pom.xml
+++ b/pig-visual/pig-monitor/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-monitor
diff --git a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java
index 316f9a781784d0292938c531250bef93994ffd96..1498b0d831efcddf6d1e46016870778dd2f93f4b 100755
--- a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java
+++ b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/WebSecurityConfigurer.java
@@ -49,12 +49,28 @@ public class WebSecurityConfigurer {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
- http.headers().frameOptions().disable().and().authorizeRequests()
- .antMatchers(adminContextPath + "/assets/**", adminContextPath + "/login",
- adminContextPath + "/instances/**", adminContextPath + "/actuator/**")
- .permitAll().anyRequest().authenticated().and().formLogin().loginPage(adminContextPath + "/login")
- .successHandler(successHandler).and().logout().logoutUrl(adminContextPath + "/logout").and().httpBasic()
- .and().csrf().disable();
+ http.headers()
+ .frameOptions()
+ .disable()
+ .and()
+ .authorizeRequests()
+ .antMatchers(adminContextPath + "/assets/**", adminContextPath + "/login",
+ adminContextPath + "/instances/**", adminContextPath + "/actuator/**")
+ .permitAll()
+ .anyRequest()
+ .authenticated()
+ .and()
+ .formLogin()
+ .loginPage(adminContextPath + "/login")
+ .successHandler(successHandler)
+ .and()
+ .logout()
+ .logoutUrl(adminContextPath + "/logout")
+ .and()
+ .httpBasic()
+ .and()
+ .csrf()
+ .disable();
return http.build();
}
diff --git a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
index 6298de211e5e73d0f798070de9af34b59059e02e..d5a87bc1f6fe0789a5e7985a056d6983adf8a59c 100644
--- a/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
+++ b/pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
@@ -20,10 +20,11 @@ public class NacosServiceInstanceConverter extends DefaultServiceInstanceConvert
@Override
protected Map getMetadata(ServiceInstance instance) {
- return (instance.getMetadata() != null)
- ? instance.getMetadata().entrySet().stream().filter((e) -> e.getKey() != null && e.getValue() != null)
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))
- : emptyMap();
+ return (instance.getMetadata() != null) ? instance.getMetadata()
+ .entrySet()
+ .stream()
+ .filter((e) -> e.getKey() != null && e.getValue() != null)
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) : emptyMap();
}
}
diff --git a/pig-visual/pig-monitor/src/main/resources/application.yml b/pig-visual/pig-monitor/src/main/resources/application.yml
index 2ce78424eb85462b1544fb092ff1798f72b62ccb..928dcb819db6292ae90e6245d8034f59cfd8466f 100755
--- a/pig-visual/pig-monitor/src/main/resources/application.yml
+++ b/pig-visual/pig-monitor/src/main/resources/application.yml
@@ -6,6 +6,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
config:
diff --git a/pig-visual/pig-sentinel-dashboard/pom.xml b/pig-visual/pig-sentinel-dashboard/pom.xml
index 86f4321d097e7009abe519cfa41bca44c444ccba..9a3fb87eafb8d98a67ca5a357cdc5e45b5bea0aa 100755
--- a/pig-visual/pig-sentinel-dashboard/pom.xml
+++ b/pig-visual/pig-sentinel-dashboard/pom.xml
@@ -6,7 +6,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-sentinel-dashboard
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
index b8a864deb36d2590743b142570b7d15a80a34cf9..af8c6a3d462063e4098db413a2c33177c602d1e7 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/DefaultLoginAuthenticationFilter.java
@@ -88,7 +88,7 @@ public class DefaultLoginAuthenticationFilter implements LoginAuthenticationFilt
// Exclude the urls which needn't auth
boolean authFilterExcludeMatch = authFilterExcludeUrls.stream()
- .anyMatch(authFilterExcludeUrl -> PATH_MATCHER.match(authFilterExcludeUrl, servletPath));
+ .anyMatch(authFilterExcludeUrl -> PATH_MATCHER.match(authFilterExcludeUrl, servletPath));
if (authFilterExcludeMatch) {
chain.doFilter(request, response);
return;
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
index afeb58bb46c3b461fa31db10466471dfb3faf2b2..821727f54c7d6011fb5dae351a517826621ffa13 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/client/SentinelApiClient.java
@@ -87,7 +87,7 @@ public class SentinelApiClient {
private static final String HTTP_HEADER_CONTENT_TYPE = "Content-Type";
private static final String HTTP_HEADER_CONTENT_TYPE_URLENCODED = ContentType.create(URLEncodedUtils.CONTENT_TYPE)
- .toString();
+ .toString();
private static final String RESOURCE_URL_PATH = "jsonTree";
@@ -143,8 +143,11 @@ public class SentinelApiClient {
private AppManagement appManagement;
public SentinelApiClient() {
- IOReactorConfig ioConfig = IOReactorConfig.custom().setConnectTimeout(3000).setSoTimeout(10000)
- .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2).build();
+ IOReactorConfig ioConfig = IOReactorConfig.custom()
+ .setConnectTimeout(3000)
+ .setSoTimeout(10000)
+ .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2)
+ .build();
httpClient = HttpAsyncClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
protected boolean isRedirectable(final String method) {
@@ -164,10 +167,10 @@ public class SentinelApiClient {
}
protected boolean isSupportPost(String app, String ip, int port) {
- return StringUtil.isNotEmpty(app)
- && Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version160)))
- .orElse(false);
+ return StringUtil.isNotEmpty(app) && Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version160)))
+ .orElse(false);
}
/**
@@ -178,10 +181,10 @@ public class SentinelApiClient {
* @param port target node's port
*/
protected boolean isSupportEnhancedContentType(String app, String ip, int port) {
- return StringUtil.isNotEmpty(app)
- && Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version171)))
- .orElse(false);
+ return StringUtil.isNotEmpty(app) && Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version171)))
+ .orElse(false);
}
private StringBuilder queryString(Map params) {
@@ -368,7 +371,7 @@ public class SentinelApiClient {
AssertUtil.isTrue(port > 0, "Bad machine port");
Map params = null;
if (StringUtil.isNotEmpty(type)) {
- params = new HashMap<>(1);
+ params = new HashMap<>(2);
params.put("type", type);
}
return executeCommand(ip, port, api, params, false).thenApply(json -> JSON.parseArray(json, ruleType));
@@ -379,11 +382,6 @@ public class SentinelApiClient {
try {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
- Map params = null;
- if (StringUtil.isNotEmpty(type)) {
- params = new HashMap<>(1);
- params.put("type", type);
- }
return fetchItemsAsync(ip, port, api, type, ruleType).get();
}
catch (InterruptedException | ExecutionException e) {
@@ -409,7 +407,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
String data = JSON.toJSONString(entities.stream().map(r -> r.toRule()).collect(Collectors.toList()));
- Map params = new HashMap<>(2);
+ Map params = new HashMap<>(4);
params.put("type", type);
params.put("data", data);
String result = executeCommand(app, ip, port, SET_RULES_PATH, params, true).get();
@@ -438,7 +436,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
String data = JSON.toJSONString(entities.stream().map(r -> r.toRule()).collect(Collectors.toList()));
- Map params = new HashMap<>(2);
+ Map params = new HashMap<>(4);
params.put("type", type);
params.put("data", data);
return executeCommand(app, ip, port, SET_RULES_PATH, params, true).thenCompose(r -> {
@@ -476,8 +474,9 @@ public class SentinelApiClient {
public List fetchFlowRuleOfMachine(String app, String ip, int port) {
List rules = fetchRules(ip, port, FLOW_RULE_TYPE, FlowRule.class);
if (rules != null) {
- return rules.stream().map(rule -> FlowRuleEntity.fromFlowRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ return rules.stream()
+ .map(rule -> FlowRuleEntity.fromFlowRule(app, ip, port, rule))
+ .collect(Collectors.toList());
}
else {
return null;
@@ -487,8 +486,9 @@ public class SentinelApiClient {
public List fetchDegradeRuleOfMachine(String app, String ip, int port) {
List rules = fetchRules(ip, port, DEGRADE_RULE_TYPE, DegradeRule.class);
if (rules != null) {
- return rules.stream().map(rule -> DegradeRuleEntity.fromDegradeRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ return rules.stream()
+ .map(rule -> DegradeRuleEntity.fromDegradeRule(app, ip, port, rule))
+ .collect(Collectors.toList());
}
else {
return null;
@@ -498,8 +498,9 @@ public class SentinelApiClient {
public List fetchSystemRuleOfMachine(String app, String ip, int port) {
List rules = fetchRules(ip, port, SYSTEM_RULE_TYPE, SystemRule.class);
if (rules != null) {
- return rules.stream().map(rule -> SystemRuleEntity.fromSystemRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ return rules.stream()
+ .map(rule -> SystemRuleEntity.fromSystemRule(app, ip, port, rule))
+ .collect(Collectors.toList());
}
else {
return null;
@@ -520,8 +521,9 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
return fetchItemsAsync(ip, port, GET_PARAM_RULE_PATH, null, ParamFlowRule.class)
- .thenApply(rules -> rules.stream().map(e -> ParamFlowRuleEntity.fromParamFlowRule(app, ip, port, e))
- .collect(Collectors.toList()));
+ .thenApply(rules -> rules.stream()
+ .map(e -> ParamFlowRuleEntity.fromParamFlowRule(app, ip, port, e))
+ .collect(Collectors.toList()));
}
catch (Exception e) {
logger.error("Error when fetching parameter flow rules", e);
@@ -541,12 +543,14 @@ public class SentinelApiClient {
AssertUtil.notEmpty(app, "Bad app name");
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("type", AUTHORITY_TYPE);
List rules = fetchRules(ip, port, AUTHORITY_TYPE, AuthorityRule.class);
- return Optional.ofNullable(rules).map(r -> r.stream()
- .map(e -> AuthorityRuleEntity.fromAuthorityRule(app, ip, port, e)).collect(Collectors.toList()))
- .orElse(null);
+ return Optional.ofNullable(rules)
+ .map(r -> r.stream()
+ .map(e -> AuthorityRuleEntity.fromAuthorityRule(app, ip, port, e))
+ .collect(Collectors.toList()))
+ .orElse(null);
}
/**
@@ -607,8 +611,8 @@ public class SentinelApiClient {
}
try {
String data = JSON
- .toJSONString(rules.stream().map(ParamFlowRuleEntity::getRule).collect(Collectors.toList()));
- Map params = new HashMap<>(1);
+ .toJSONString(rules.stream().map(ParamFlowRuleEntity::getRule).collect(Collectors.toList()));
+ Map params = new HashMap<>(2);
params.put("data", data);
return executeCommand(app, ip, port, SET_PARAM_RULE_PATH, params, true).thenCompose(e -> {
if (CommandConstants.MSG_SUCCESS.equals(e)) {
@@ -634,7 +638,7 @@ public class SentinelApiClient {
}
try {
return executeCommand(ip, port, FETCH_CLUSTER_MODE_PATH, false)
- .thenApply(r -> JSON.parseObject(r, ClusterStateSimpleEntity.class));
+ .thenApply(r -> JSON.parseObject(r, ClusterStateSimpleEntity.class));
}
catch (Exception ex) {
logger.warn("Error when fetching cluster mode", ex);
@@ -647,7 +651,7 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("mode", String.valueOf(mode));
return executeCommand(ip, port, MODIFY_CLUSTER_MODE_PATH, params, false).thenCompose(e -> {
if (CommandConstants.MSG_SUCCESS.equals(e)) {
@@ -671,7 +675,7 @@ public class SentinelApiClient {
}
try {
return executeCommand(ip, port, FETCH_CLUSTER_CLIENT_CONFIG_PATH, false)
- .thenApply(r -> JSON.parseObject(r, ClusterClientInfoVO.class));
+ .thenApply(r -> JSON.parseObject(r, ClusterClientInfoVO.class));
}
catch (Exception ex) {
logger.warn("Error when fetching cluster client config", ex);
@@ -685,7 +689,7 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("data", JSON.toJSONString(config));
return executeCommand(app, ip, port, MODIFY_CLUSTER_CLIENT_CONFIG_PATH, params, true).thenCompose(e -> {
if (CommandConstants.MSG_SUCCESS.equals(e)) {
@@ -709,18 +713,18 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("data", JSON.toJSONString(config));
return executeCommand(app, ip, port, MODIFY_CLUSTER_SERVER_FLOW_CONFIG_PATH, params, true)
- .thenCompose(e -> {
- if (CommandConstants.MSG_SUCCESS.equals(e)) {
- return CompletableFuture.completedFuture(null);
- }
- else {
- logger.warn("Error when modifying cluster server flow config: " + e);
- return AsyncUtils.newFailedFuture(new RuntimeException(e));
- }
- });
+ .thenCompose(e -> {
+ if (CommandConstants.MSG_SUCCESS.equals(e)) {
+ return CompletableFuture.completedFuture(null);
+ }
+ else {
+ logger.warn("Error when modifying cluster server flow config: " + e);
+ return AsyncUtils.newFailedFuture(new RuntimeException(e));
+ }
+ });
}
catch (Exception ex) {
logger.warn("Error when modifying cluster server flow config", ex);
@@ -734,19 +738,19 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(2);
+ Map params = new HashMap<>(4);
params.put("port", config.getPort().toString());
params.put("idleSeconds", config.getIdleSeconds().toString());
return executeCommand(app, ip, port, MODIFY_CLUSTER_SERVER_TRANSPORT_CONFIG_PATH, params, false)
- .thenCompose(e -> {
- if (CommandConstants.MSG_SUCCESS.equals(e)) {
- return CompletableFuture.completedFuture(null);
- }
- else {
- logger.warn("Error when modifying cluster server transport config: " + e);
- return AsyncUtils.newFailedFuture(new RuntimeException(e));
- }
- });
+ .thenCompose(e -> {
+ if (CommandConstants.MSG_SUCCESS.equals(e)) {
+ return CompletableFuture.completedFuture(null);
+ }
+ else {
+ logger.warn("Error when modifying cluster server transport config: " + e);
+ return AsyncUtils.newFailedFuture(new RuntimeException(e));
+ }
+ });
}
catch (Exception ex) {
logger.warn("Error when modifying cluster server transport config", ex);
@@ -759,18 +763,18 @@ public class SentinelApiClient {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("Invalid parameter"));
}
try {
- Map params = new HashMap<>(1);
+ Map params = new HashMap<>(2);
params.put("data", JSON.toJSONString(set));
return executeCommand(app, ip, port, MODIFY_CLUSTER_SERVER_NAMESPACE_SET_PATH, params, true)
- .thenCompose(e -> {
- if (CommandConstants.MSG_SUCCESS.equals(e)) {
- return CompletableFuture.completedFuture(null);
- }
- else {
- logger.warn("Error when modifying cluster server NamespaceSet", e);
- return AsyncUtils.newFailedFuture(new RuntimeException(e));
- }
- });
+ .thenCompose(e -> {
+ if (CommandConstants.MSG_SUCCESS.equals(e)) {
+ return CompletableFuture.completedFuture(null);
+ }
+ else {
+ logger.warn("Error when modifying cluster server NamespaceSet", e);
+ return AsyncUtils.newFailedFuture(new RuntimeException(e));
+ }
+ });
}
catch (Exception ex) {
logger.warn("Error when modifying cluster server NamespaceSet", ex);
@@ -784,7 +788,7 @@ public class SentinelApiClient {
}
try {
return executeCommand(ip, port, FETCH_CLUSTER_SERVER_BASIC_INFO_PATH, false)
- .thenApply(r -> JSON.parseObject(r, ClusterServerStateVO.class));
+ .thenApply(r -> JSON.parseObject(r, ClusterServerStateVO.class));
}
catch (Exception ex) {
logger.warn("Error when fetching cluster sever all config and basic info", ex);
@@ -847,8 +851,8 @@ public class SentinelApiClient {
return executeCommand(ip, port, FETCH_GATEWAY_FLOW_RULE_PATH, false).thenApply(r -> {
List gatewayFlowRules = JSON.parseArray(r, GatewayFlowRule.class);
List entities = gatewayFlowRules.stream()
- .map(rule -> GatewayFlowRuleEntity.fromGatewayFlowRule(app, ip, port, rule))
- .collect(Collectors.toList());
+ .map(rule -> GatewayFlowRuleEntity.fromGatewayFlowRule(app, ip, port, rule))
+ .collect(Collectors.toList());
return entities;
});
}
@@ -868,7 +872,7 @@ public class SentinelApiClient {
AssertUtil.notEmpty(ip, "Bad machine IP");
AssertUtil.isTrue(port > 0, "Bad machine port");
String data = JSON
- .toJSONString(rules.stream().map(r -> r.toGatewayFlowRule()).collect(Collectors.toList()));
+ .toJSONString(rules.stream().map(r -> r.toGatewayFlowRule()).collect(Collectors.toList()));
Map params = new HashMap<>(2);
params.put("data", data);
String result = executeCommand(app, ip, port, MODIFY_GATEWAY_FLOW_RULE_PATH, params, true).get();
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
index b372453bb4a1e65cd44325690972cc6c53248db6..1efc019edf404c92c7ac76d25d4c12693bb53b86 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AppController.java
@@ -58,8 +58,10 @@ public class AppController {
return Result.ofSuccess(null);
}
List list = new ArrayList<>(appInfo.getMachines());
- Collections.sort(list, Comparator.comparing(MachineInfo::getApp).thenComparing(MachineInfo::getIp)
- .thenComparingInt(MachineInfo::getPort));
+ Collections.sort(list,
+ Comparator.comparing(MachineInfo::getApp)
+ .thenComparing(MachineInfo::getIp)
+ .thenComparingInt(MachineInfo::getPort));
return Result.ofSuccess(MachineInfoVo.fromMachineInfoList(list));
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
index f81d64cd9099138153242416a42cc40860f6847e..72ddaf3b9043e19184f298b128e8e86591318395 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
@@ -60,9 +60,10 @@ public class ParamFlowRuleController {
private boolean checkIfSupported(String app, String ip, int port) {
try {
- return Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version020)))
- .orElse(true);
+ return Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version020)))
+ .orElse(true);
// If error occurred or cannot retrieve machine info, return true.
}
catch (Exception ex) {
@@ -87,8 +88,10 @@ public class ParamFlowRuleController {
return unsupportedVersion();
}
try {
- return sentinelApiClient.fetchParamFlowRulesOfMachine(app, ip, port).thenApply(repository::saveAll)
- .thenApply(Result::ofSuccess).get();
+ return sentinelApiClient.fetchParamFlowRulesOfMachine(app, ip, port)
+ .thenApply(repository::saveAll)
+ .thenApply(Result::ofSuccess)
+ .get();
}
catch (ExecutionException ex) {
logger.error("Error when querying parameter flow rules", ex.getCause());
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
index ad9148c603648351c5bb8e1ba8beb502a0828c02..c342d5460688e57025ff06fdd743578f8c17ae3a 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ResourceController.java
@@ -81,8 +81,8 @@ public class ResourceController {
}
if (StringUtil.isNotEmpty(searchKey)) {
nodeVos = nodeVos.stream()
- .filter(node -> node.getResource().toLowerCase().contains(searchKey.toLowerCase()))
- .collect(Collectors.toList());
+ .filter(node -> node.getResource().toLowerCase().contains(searchKey.toLowerCase()))
+ .collect(Collectors.toList());
}
return Result.ofSuccess(ResourceVo.fromNodeVoList(nodeVos));
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java
index e967900b8c559ffd6b4f40186a7513e805508fdc..d15dee282e7c5d20bcbf358ae45489a37ad0d268 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/cluster/ClusterConfigController.java
@@ -147,7 +147,9 @@ public class ClusterConfigController {
}
try {
return clusterConfigService.getClusterUniversalState(app)
- .thenApply(ClusterEntityUtils::wrapToAppClusterServerState).thenApply(Result::ofSuccess).get();
+ .thenApply(ClusterEntityUtils::wrapToAppClusterServerState)
+ .thenApply(Result::ofSuccess)
+ .get();
}
catch (ExecutionException ex) {
logger.error("Error when fetching cluster server state of app: " + app, ex.getCause());
@@ -166,7 +168,9 @@ public class ClusterConfigController {
}
try {
return clusterConfigService.getClusterUniversalState(app)
- .thenApply(ClusterEntityUtils::wrapToAppClusterClientState).thenApply(Result::ofSuccess).get();
+ .thenApply(ClusterEntityUtils::wrapToAppClusterClientState)
+ .thenApply(Result::ofSuccess)
+ .get();
}
catch (ExecutionException ex) {
logger.error("Error when fetching cluster token client state of app: " + app, ex.getCause());
@@ -202,9 +206,10 @@ public class ClusterConfigController {
private boolean checkIfSupported(String app, String ip, int port) {
try {
- return Optional.ofNullable(appManagement.getDetailApp(app)).flatMap(e -> e.getMachine(ip, port))
- .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version140)))
- .orElse(true);
+ return Optional.ofNullable(appManagement.getDetailApp(app))
+ .flatMap(e -> e.getMachine(ip, port))
+ .flatMap(m -> VersionUtils.parseVersion(m.getVersion()).map(v -> v.greaterOrEqual(version140)))
+ .orElse(true);
// If error occurred or cannot retrieve machine info, return true.
}
catch (Exception ex) {
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
index 32e1888271bb7bd696c9d7b9c58b41e71c084ef4..9415b577e964bc9c6ec35dd190d631a181073b5e 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
@@ -125,7 +125,7 @@ public class GatewayApiController {
// 匹配模式
Integer matchStrategy = predicateItem.getMatchStrategy();
if (!Arrays.asList(URL_MATCH_STRATEGY_EXACT, URL_MATCH_STRATEGY_PREFIX, URL_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "invalid matchStrategy: " + matchStrategy);
}
predicateItemEntity.setMatchStrategy(matchStrategy);
@@ -197,7 +197,7 @@ public class GatewayApiController {
// 匹配模式
int matchStrategy = predicateItem.getMatchStrategy();
if (!Arrays.asList(URL_MATCH_STRATEGY_EXACT, URL_MATCH_STRATEGY_PREFIX, URL_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "Invalid matchStrategy: " + matchStrategy);
}
predicateItemEntity.setMatchStrategy(matchStrategy);
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
index 016d4f3960150065dcceb122103d067ca673f32e..5a9907c40220b4c443dc0e52da9ccd713d0a7937 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
@@ -132,15 +132,17 @@ public class GatewayFlowRuleController {
// 参数属性 0-ClientIP 1-Remote Host 2-Header 3-URL参数 4-Cookie
Integer parseStrategy = paramItem.getParseStrategy();
- if (!Arrays.asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
- PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE).contains(parseStrategy)) {
+ if (!Arrays
+ .asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
+ PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
+ .contains(parseStrategy)) {
return Result.ofFail(-1, "invalid parseStrategy: " + parseStrategy);
}
itemEntity.setParseStrategy(paramItem.getParseStrategy());
// 当参数属性为2-Header 3-URL参数 4-Cookie时,参数名称必填
if (Arrays.asList(PARAM_PARSE_STRATEGY_HEADER, PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
- .contains(parseStrategy)) {
+ .contains(parseStrategy)) {
// 参数名称
String fieldName = paramItem.getFieldName();
if (StringUtil.isBlank(fieldName)) {
@@ -155,8 +157,8 @@ public class GatewayFlowRuleController {
itemEntity.setPattern(pattern);
Integer matchStrategy = paramItem.getMatchStrategy();
if (!Arrays
- .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "invalid matchStrategy: " + matchStrategy);
}
itemEntity.setMatchStrategy(matchStrategy);
@@ -199,7 +201,7 @@ public class GatewayFlowRuleController {
return Result.ofFail(-1, "intervalUnit can't be null");
}
if (!Arrays.asList(INTERVAL_UNIT_SECOND, INTERVAL_UNIT_MINUTE, INTERVAL_UNIT_HOUR, INTERVAL_UNIT_DAY)
- .contains(intervalUnit)) {
+ .contains(intervalUnit)) {
return Result.ofFail(-1, "Invalid intervalUnit: " + intervalUnit);
}
entity.setIntervalUnit(intervalUnit);
@@ -283,15 +285,17 @@ public class GatewayFlowRuleController {
// 参数属性 0-ClientIP 1-Remote Host 2-Header 3-URL参数 4-Cookie
Integer parseStrategy = paramItem.getParseStrategy();
- if (!Arrays.asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
- PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE).contains(parseStrategy)) {
+ if (!Arrays
+ .asList(PARAM_PARSE_STRATEGY_CLIENT_IP, PARAM_PARSE_STRATEGY_HOST, PARAM_PARSE_STRATEGY_HEADER,
+ PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
+ .contains(parseStrategy)) {
return Result.ofFail(-1, "invalid parseStrategy: " + parseStrategy);
}
itemEntity.setParseStrategy(paramItem.getParseStrategy());
// 当参数属性为2-Header 3-URL参数 4-Cookie时,参数名称必填
if (Arrays.asList(PARAM_PARSE_STRATEGY_HEADER, PARAM_PARSE_STRATEGY_URL_PARAM, PARAM_PARSE_STRATEGY_COOKIE)
- .contains(parseStrategy)) {
+ .contains(parseStrategy)) {
// 参数名称
String fieldName = paramItem.getFieldName();
if (StringUtil.isBlank(fieldName)) {
@@ -306,8 +310,8 @@ public class GatewayFlowRuleController {
itemEntity.setPattern(pattern);
Integer matchStrategy = paramItem.getMatchStrategy();
if (!Arrays
- .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
- .contains(matchStrategy)) {
+ .asList(PARAM_MATCH_STRATEGY_EXACT, PARAM_MATCH_STRATEGY_CONTAINS, PARAM_MATCH_STRATEGY_REGEX)
+ .contains(matchStrategy)) {
return Result.ofFail(-1, "invalid matchStrategy: " + matchStrategy);
}
itemEntity.setMatchStrategy(matchStrategy);
@@ -353,7 +357,7 @@ public class GatewayFlowRuleController {
return Result.ofFail(-1, "intervalUnit can't be null");
}
if (!Arrays.asList(INTERVAL_UNIT_SECOND, INTERVAL_UNIT_MINUTE, INTERVAL_UNIT_HOUR, INTERVAL_UNIT_DAY)
- .contains(intervalUnit)) {
+ .contains(intervalUnit)) {
return Result.ofFail(-1, "Invalid intervalUnit: " + intervalUnit);
}
entity.setIntervalUnit(intervalUnit);
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
index 463412c837c394459981928f72f9091c83152ccc..33bfc2bb763fd051b8a342286835e863a1a9c9fc 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/AppInfo.java
@@ -98,8 +98,10 @@ public class AppInfo {
long healthyCount = machines.stream().filter(MachineInfo::isHealthy).count();
if (healthyCount == 0) {
// No healthy machines.
- return machines.stream().max(Comparator.comparingLong(MachineInfo::getLastHeartbeat))
- .map(e -> System.currentTimeMillis() - e.getLastHeartbeat() < threshold).orElse(false);
+ return machines.stream()
+ .max(Comparator.comparingLong(MachineInfo::getLastHeartbeat))
+ .map(e -> System.currentTimeMillis() - e.getLastHeartbeat() < threshold)
+ .orElse(false);
}
}
return true;
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
index 2b4a080bc0cae2f25b53341e64c44bc2fd70a8fb..357ed599fb4d61b2ff4d4a9f9a977d8463b25b95 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/discovery/MachineInfo.java
@@ -151,11 +151,31 @@ public class MachineInfo implements Comparable {
@Override
public String toString() {
- return new StringBuilder("MachineInfo {").append("app='").append(app).append('\'').append(",appType='")
- .append(appType).append('\'').append(", hostname='").append(hostname).append('\'').append(", ip='")
- .append(ip).append('\'').append(", port=").append(port).append(", heartbeatVersion=")
- .append(heartbeatVersion).append(", lastHeartbeat=").append(lastHeartbeat).append(", version='")
- .append(version).append('\'').append(", healthy=").append(isHealthy()).append('}').toString();
+ return new StringBuilder("MachineInfo {").append("app='")
+ .append(app)
+ .append('\'')
+ .append(",appType='")
+ .append(appType)
+ .append('\'')
+ .append(", hostname='")
+ .append(hostname)
+ .append('\'')
+ .append(", ip='")
+ .append(ip)
+ .append('\'')
+ .append(", port=")
+ .append(port)
+ .append(", heartbeatVersion=")
+ .append(heartbeatVersion)
+ .append(", lastHeartbeat=")
+ .append(lastHeartbeat)
+ .append(", version='")
+ .append(version)
+ .append('\'')
+ .append(", healthy=")
+ .append(isHealthy())
+ .append('}')
+ .toString();
}
@Override
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
index ec42af53b69b0ebe2492edfa233cb36e7b69b6a5..2b4cc7887cea6ad4b8ed84311fcfc332a45ee050 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java
@@ -101,8 +101,11 @@ public class MetricFetcher {
fetchWorker = new ThreadPoolExecutor(cores, cores, keepAliveTime, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<>(queueSize),
new NamedThreadFactory("sentinel-dashboard-metrics-fetchWorker", true), handler);
- IOReactorConfig ioConfig = IOReactorConfig.custom().setConnectTimeout(3000).setSoTimeout(3000)
- .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2).build();
+ IOReactorConfig ioConfig = IOReactorConfig.custom()
+ .setConnectTimeout(3000)
+ .setSoTimeout(3000)
+ .setIoThreadCount(Runtime.getRuntime().availableProcessors() * 2)
+ .build();
httpclient = HttpAsyncClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java
index 684ffc2c05b25878604940af119b295a7a9baf85..7968851a8d375f9e2b82b01ae8f234a8096146cf 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/metric/InMemoryMetricsRepository.java
@@ -52,14 +52,15 @@ public class InMemoryMetricsRepository implements MetricsRepository new HashMap<>(16))
- .computeIfAbsent(entity.getResource(), e -> new LinkedHashMap() {
- @Override
- protected boolean removeEldestEntry(Entry eldest) {
- // Metric older than {@link #MAX_METRIC_LIVE_TIME_MS} will be
- // removed.
- return eldest.getKey() < TimeUtil.currentTimeMillis() - MAX_METRIC_LIVE_TIME_MS;
- }
- }).put(entity.getTimestamp().getTime(), entity);
+ .computeIfAbsent(entity.getResource(), e -> new LinkedHashMap() {
+ @Override
+ protected boolean removeEldestEntry(Entry eldest) {
+ // Metric older than {@link #MAX_METRIC_LIVE_TIME_MS} will be
+ // removed.
+ return eldest.getKey() < TimeUtil.currentTimeMillis() - MAX_METRIC_LIVE_TIME_MS;
+ }
+ })
+ .put(entity.getTimestamp().getTime(), entity);
}
finally {
readWriteLock.writeLock().unlock();
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
index 2e6e15cf7c0656cec045594d6a3d8b6b4542616c..d3be5f88b7b920fcd347cf5dce3aa40af3bacc40 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/repository/rule/InMemoryRuleRepositoryAdapter.java
@@ -49,11 +49,12 @@ public abstract class InMemoryRuleRepositoryAdapter implem
if (processedEntity != null) {
allRules.put(processedEntity.getId(), processedEntity);
machineRules
- .computeIfAbsent(MachineInfo.of(processedEntity.getApp(), processedEntity.getIp(),
- processedEntity.getPort()), e -> new ConcurrentHashMap<>(32))
- .put(processedEntity.getId(), processedEntity);
+ .computeIfAbsent(
+ MachineInfo.of(processedEntity.getApp(), processedEntity.getIp(), processedEntity.getPort()),
+ e -> new ConcurrentHashMap<>(32))
+ .put(processedEntity.getId(), processedEntity);
appRules.computeIfAbsent(processedEntity.getApp(), v -> new ConcurrentHashMap<>(32))
- .put(processedEntity.getId(), processedEntity);
+ .put(processedEntity.getId(), processedEntity);
}
return processedEntity;
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java
index c5bf9fc8c8c59b5a40ebea9dfbefa5f170bf69de..eabafdd2bcdc5af805572baa2d7236987852e5b3 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/FlowRuleApiProvider.java
@@ -44,10 +44,12 @@ public class FlowRuleApiProvider implements DynamicRuleProvider();
}
- List list = appManagement.getDetailApp(appName).getMachines().stream()
- .filter(MachineInfo::isHealthy)
- .sorted((e1, e2) -> Long.compare(e2.getLastHeartbeat(), e1.getLastHeartbeat()))
- .collect(Collectors.toList());
+ List list = appManagement.getDetailApp(appName)
+ .getMachines()
+ .stream()
+ .filter(MachineInfo::isHealthy)
+ .sorted((e1, e2) -> Long.compare(e2.getLastHeartbeat(), e1.getLastHeartbeat()))
+ .collect(Collectors.toList());
if (list.isEmpty()) {
return new ArrayList<>();
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java
index 1635e8d61f2cc197fbac20fa28eb98a9fa542e66..53a046af61d5519724309382e2334d265ab4952c 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterAssignServiceImpl.java
@@ -60,13 +60,14 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
private ClusterAppAssignResultVO handleUnbindClusterServerNotInApp(String app, String machineId) {
Set failedSet = new HashSet<>();
try {
- List list = clusterConfigService.getClusterUniversalState(app).get(10,
- TimeUnit.SECONDS);
+ List list = clusterConfigService.getClusterUniversalState(app)
+ .get(10, TimeUnit.SECONDS);
Set toModifySet = list.stream()
- .filter(e -> e.getState().getStateInfo().getMode() == ClusterStateManager.CLUSTER_CLIENT)
- .filter(e -> machineId.equals(e.getState().getClient().getClientConfig().getServerHost() + ':'
- + e.getState().getClient().getClientConfig().getServerPort()))
- .map(e -> e.getIp() + '@' + e.getCommandPort()).collect(Collectors.toSet());
+ .filter(e -> e.getState().getStateInfo().getMode() == ClusterStateManager.CLUSTER_CLIENT)
+ .filter(e -> machineId.equals(e.getState().getClient().getClientConfig().getServerHost() + ':'
+ + e.getState().getClient().getClientConfig().getServerPort()))
+ .map(e -> e.getIp() + '@' + e.getCommandPort())
+ .collect(Collectors.toSet());
// Modify mode to NOT-STARTED for all associated token clients.
modifyToNonStarted(toModifySet, failedSet);
}
@@ -79,11 +80,15 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
}
private void modifyToNonStarted(Set toModifySet, Set failedSet) {
- toModifySet.parallelStream().map(MachineUtils::parseCommandIpAndPort).filter(Optional::isPresent)
- .map(Optional::get).map(e -> {
- CompletableFuture f = modifyMode(e.r1, e.r2, ClusterStateManager.CLUSTER_NOT_STARTED);
- return Tuple2.of(e.r1 + '@' + e.r2, f);
- }).forEach(f -> handleFutureSync(f, failedSet));
+ toModifySet.parallelStream()
+ .map(MachineUtils::parseCommandIpAndPort)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .map(e -> {
+ CompletableFuture f = modifyMode(e.r1, e.r2, ClusterStateManager.CLUSTER_NOT_STARTED);
+ return Tuple2.of(e.r1 + '@' + e.r2, f);
+ })
+ .forEach(f -> handleFutureSync(f, failedSet));
}
@Override
@@ -97,7 +102,7 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
Set failedSet = new HashSet<>();
try {
ClusterGroupEntity entity = clusterConfigService.getClusterUniversalStateForAppMachine(app, machineId)
- .get(10, TimeUnit.SECONDS);
+ .get(10, TimeUnit.SECONDS);
Set toModifySet = new HashSet<>();
toModifySet.add(machineId);
if (entity.getClientSet() != null) {
@@ -120,7 +125,7 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
AssertUtil.assertNotBlank(app, "app cannot be blank");
AssertUtil.isTrue(machineIdSet != null && !machineIdSet.isEmpty(), "machineIdSet cannot be empty");
ClusterAppAssignResultVO result = new ClusterAppAssignResultVO().setFailedClientSet(new HashSet<>())
- .setFailedServerSet(new HashSet<>());
+ .setFailedServerSet(new HashSet<>());
for (String machineId : machineIdSet) {
ClusterAppAssignResultVO resultVO = unbindClusterServer(app, machineId);
result.getFailedClientSet().addAll(resultVO.getFailedClientSet());
@@ -142,13 +147,14 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
String ip = e.getIp();
int commandPort = parsePort(e);
CompletableFuture f = modifyMode(ip, commandPort, ClusterStateManager.CLUSTER_SERVER)
- .thenCompose(v -> applyServerConfigChange(app, ip, commandPort, e));
+ .thenCompose(v -> applyServerConfigChange(app, ip, commandPort, e));
return Tuple2.of(e.getMachineId(), f);
}).forEach(t -> handleFutureSync(t, failedServerSet));
// Assign client of servers and apply config.
- clusterMap.parallelStream().filter(Objects::nonNull)
- .forEach(e -> applyAllClientConfigChange(app, e, failedClientSet));
+ clusterMap.parallelStream()
+ .filter(Objects::nonNull)
+ .forEach(e -> applyAllClientConfigChange(app, e, failedClientSet));
// Unbind remaining (unassigned) machines.
applyAllRemainingMachineSet(app, remainingSet, failedClientSet);
@@ -160,13 +166,18 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
if (remainingSet == null || remainingSet.isEmpty()) {
return;
}
- remainingSet.parallelStream().filter(Objects::nonNull).map(MachineUtils::parseCommandIpAndPort)
- .filter(Optional::isPresent).map(Optional::get).map(ipPort -> {
- String ip = ipPort.r1;
- int commandPort = ipPort.r2;
- CompletableFuture f = modifyMode(ip, commandPort, ClusterStateManager.CLUSTER_NOT_STARTED);
- return Tuple2.of(ip + '@' + commandPort, f);
- }).forEach(t -> handleFutureSync(t, failedSet));
+ remainingSet.parallelStream()
+ .filter(Objects::nonNull)
+ .map(MachineUtils::parseCommandIpAndPort)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .map(ipPort -> {
+ String ip = ipPort.r1;
+ int commandPort = ipPort.r2;
+ CompletableFuture f = modifyMode(ip, commandPort, ClusterStateManager.CLUSTER_NOT_STARTED);
+ return Tuple2.of(ip + '@' + commandPort, f);
+ })
+ .forEach(t -> handleFutureSync(t, failedSet));
}
private void applyAllClientConfigChange(String app, ClusterAppAssignMap assignMap, Set failedSet) {
@@ -176,15 +187,20 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
}
final String serverIp = assignMap.getIp();
final int serverPort = assignMap.getPort();
- clientSet.stream().map(MachineUtils::parseCommandIpAndPort).filter(Optional::isPresent).map(Optional::get)
- .map(ipPort -> {
- CompletableFuture f = sentinelApiClient
- .modifyClusterMode(ipPort.r1, ipPort.r2, ClusterStateManager.CLUSTER_CLIENT)
- .thenCompose(v -> sentinelApiClient.modifyClusterClientConfig(app, ipPort.r1, ipPort.r2,
- new ClusterClientConfig().setRequestTimeout(20).setServerHost(serverIp)
- .setServerPort(serverPort)));
- return Tuple2.of(ipPort.r1 + '@' + ipPort.r2, f);
- }).forEach(t -> handleFutureSync(t, failedSet));
+ clientSet.stream()
+ .map(MachineUtils::parseCommandIpAndPort)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .map(ipPort -> {
+ CompletableFuture f = sentinelApiClient
+ .modifyClusterMode(ipPort.r1, ipPort.r2, ClusterStateManager.CLUSTER_CLIENT)
+ .thenCompose(v -> sentinelApiClient.modifyClusterClientConfig(app, ipPort.r1, ipPort.r2,
+ new ClusterClientConfig().setRequestTimeout(20)
+ .setServerHost(serverIp)
+ .setServerPort(serverPort)));
+ return Tuple2.of(ipPort.r1 + '@' + ipPort.r2, f);
+ })
+ .forEach(t -> handleFutureSync(t, failedSet));
}
private void handleFutureSync(Tuple2> t, Set failedSet) {
@@ -205,10 +221,10 @@ public class ClusterAssignServiceImpl implements ClusterAssignService {
private CompletableFuture applyServerConfigChange(String app, String ip, int commandPort,
ClusterAppAssignMap assignMap) {
ServerTransportConfig transportConfig = new ServerTransportConfig().setPort(assignMap.getPort())
- .setIdleSeconds(600);
+ .setIdleSeconds(600);
return sentinelApiClient.modifyClusterServerTransportConfig(app, ip, commandPort, transportConfig)
- .thenCompose(v -> applyServerFlowConfigChange(app, ip, commandPort, assignMap))
- .thenCompose(v -> applyServerNamespaceSetConfig(app, ip, commandPort, assignMap));
+ .thenCompose(v -> applyServerFlowConfigChange(app, ip, commandPort, assignMap))
+ .thenCompose(v -> applyServerNamespaceSetConfig(app, ip, commandPort, assignMap));
}
private CompletableFuture applyServerFlowConfigChange(String app, String ip, int commandPort,
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java
index d1cf10ffd1251f8d43da4a41f2cb5a8a4830b0b2..d88506316359cf254a0d90c2d8d6fcb3be2b51a1 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/service/ClusterConfigService.java
@@ -61,7 +61,7 @@ public class ClusterConfigService {
String ip = request.getIp();
int port = request.getPort();
return sentinelApiClient.modifyClusterClientConfig(app, ip, port, request.getClientConfig())
- .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_CLIENT));
+ .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_CLIENT));
}
private boolean notClientRequestValid(/* @NonNull */ ClusterClientModifyRequest request) {
@@ -87,9 +87,9 @@ public class ClusterConfigService {
String ip = request.getIp();
int port = request.getPort();
return sentinelApiClient.modifyClusterServerNamespaceSet(app, ip, port, namespaceSet)
- .thenCompose(v -> sentinelApiClient.modifyClusterServerTransportConfig(app, ip, port, transportConfig))
- .thenCompose(v -> sentinelApiClient.modifyClusterServerFlowConfig(app, ip, port, flowConfig))
- .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_SERVER));
+ .thenCompose(v -> sentinelApiClient.modifyClusterServerTransportConfig(app, ip, port, transportConfig))
+ .thenCompose(v -> sentinelApiClient.modifyClusterServerFlowConfig(app, ip, port, flowConfig))
+ .thenCompose(v -> sentinelApiClient.modifyClusterMode(ip, port, ClusterStateManager.CLUSTER_SERVER));
}
/**
@@ -107,11 +107,12 @@ public class ClusterConfigService {
return CompletableFuture.completedFuture(new ArrayList<>());
}
- List> futures = appInfo.getMachines().stream()
- .filter(e -> e.isHealthy())
- .map(machine -> getClusterUniversalState(app, machine.getIp(), machine.getPort())
- .thenApply(e -> new ClusterUniversalStatePairVO(machine.getIp(), machine.getPort(), e)))
- .collect(Collectors.toList());
+ List> futures = appInfo.getMachines()
+ .stream()
+ .filter(e -> e.isHealthy())
+ .map(machine -> getClusterUniversalState(app, machine.getIp(), machine.getPort())
+ .thenApply(e -> new ClusterUniversalStatePairVO(machine.getIp(), machine.getPort(), e)))
+ .collect(Collectors.toList());
return AsyncUtils.sequenceSuccessFuture(futures);
}
@@ -125,36 +126,43 @@ public class ClusterConfigService {
return AsyncUtils.newFailedFuture(new IllegalArgumentException("app does not have machines"));
}
- boolean machineOk = appInfo.getMachines().stream().filter(e -> e.isHealthy())
- .map(e -> e.getIp() + '@' + e.getPort()).anyMatch(e -> e.equals(machineId));
+ boolean machineOk = appInfo.getMachines()
+ .stream()
+ .filter(e -> e.isHealthy())
+ .map(e -> e.getIp() + '@' + e.getPort())
+ .anyMatch(e -> e.equals(machineId));
if (!machineOk) {
return AsyncUtils.newFailedFuture(new IllegalStateException("machine does not exist or disconnected"));
}
return getClusterUniversalState(app).thenApply(ClusterEntityUtils::wrapToClusterGroup)
- .thenCompose(e -> e.stream().filter(e1 -> e1.getMachineId().equals(machineId)).findAny()
- .map(CompletableFuture::completedFuture)
- .orElse(AsyncUtils.newFailedFuture(new IllegalStateException("not a server: " + machineId))));
+ .thenCompose(e -> e.stream()
+ .filter(e1 -> e1.getMachineId().equals(machineId))
+ .findAny()
+ .map(CompletableFuture::completedFuture)
+ .orElse(AsyncUtils.newFailedFuture(new IllegalStateException("not a server: " + machineId))));
}
public CompletableFuture getClusterUniversalState(String app, String ip, int port) {
return sentinelApiClient.fetchClusterMode(ip, port)
- .thenApply(e -> new ClusterUniversalStateVO().setStateInfo(e)).thenCompose(vo -> {
- if (vo.getStateInfo().getClientAvailable()) {
- return sentinelApiClient.fetchClusterClientInfoAndConfig(ip, port)
- .thenApply(cc -> vo.setClient(new ClusterClientStateVO().setClientConfig(cc)));
- }
- else {
- return CompletableFuture.completedFuture(vo);
- }
- }).thenCompose(vo -> {
- if (vo.getStateInfo().getServerAvailable()) {
- return sentinelApiClient.fetchClusterServerBasicInfo(ip, port).thenApply(vo::setServer);
- }
- else {
- return CompletableFuture.completedFuture(vo);
- }
- });
+ .thenApply(e -> new ClusterUniversalStateVO().setStateInfo(e))
+ .thenCompose(vo -> {
+ if (vo.getStateInfo().getClientAvailable()) {
+ return sentinelApiClient.fetchClusterClientInfoAndConfig(ip, port)
+ .thenApply(cc -> vo.setClient(new ClusterClientStateVO().setClientConfig(cc)));
+ }
+ else {
+ return CompletableFuture.completedFuture(vo);
+ }
+ })
+ .thenCompose(vo -> {
+ if (vo.getStateInfo().getServerAvailable()) {
+ return sentinelApiClient.fetchClusterServerBasicInfo(ip, port).thenApply(vo::setServer);
+ }
+ else {
+ return CompletableFuture.completedFuture(vo);
+ }
+ });
}
private boolean invalidTransportConfig(ServerTransportConfig transportConfig) {
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java
index b7372b273a26dad85d9c2227ec1c7a32c134f552..2cf15bbc95d55f9f926d31a002cc3fd9b3cc4219 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/AsyncUtils.java
@@ -39,13 +39,18 @@ public final class AsyncUtils {
}
public static CompletableFuture> sequenceFuture(List> futures) {
- return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenApply(
- v -> futures.stream().map(AsyncUtils::getValue).filter(Objects::nonNull).collect(Collectors.toList()));
+ return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))
+ .thenApply(v -> futures.stream()
+ .map(AsyncUtils::getValue)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList()));
}
public static CompletableFuture> sequenceSuccessFuture(List> futures) {
- return CompletableFuture.supplyAsync(() -> futures.parallelStream().map(AsyncUtils::getValue)
- .filter(Objects::nonNull).collect(Collectors.toList()));
+ return CompletableFuture.supplyAsync(() -> futures.parallelStream()
+ .map(AsyncUtils::getValue)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList()));
}
public static T getValue(CompletableFuture future) {
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
index a4cb6de124758687c478966272ec4184acfd4fb5..de2ed0c5d17183a37c2c47321319f2ba388d6410 100644
--- a/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
+++ b/pig-visual/pig-sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/util/ClusterEntityUtils.java
@@ -45,10 +45,15 @@ public final class ClusterEntityUtils {
String serverId = ip + '@' + stateVO.getCommandPort();
ClusterServerStateVO serverStateVO = stateVO.getState().getServer();
map.computeIfAbsent(serverId,
- v -> new AppClusterServerStateWrapVO().setId(serverId).setIp(ip)
- .setPort(serverStateVO.getPort()).setState(serverStateVO).setBelongToApp(true)
- .setConnectedCount(serverStateVO.getConnection().stream()
- .mapToInt(ConnectionGroupVO::getConnectedCount).sum()));
+ v -> new AppClusterServerStateWrapVO().setId(serverId)
+ .setIp(ip)
+ .setPort(serverStateVO.getPort())
+ .setState(serverStateVO)
+ .setBelongToApp(true)
+ .setConnectedCount(serverStateVO.getConnection()
+ .stream()
+ .mapToInt(ConnectionGroupVO::getConnectedCount)
+ .sum()));
tokenServerSet.add(ip + ":" + serverStateVO.getPort());
}
}
@@ -69,8 +74,11 @@ public final class ClusterEntityUtils {
// We are not able to get the commandPort of foreign token server
// directly.
String serverId = String.format("%s:%d", serverIp, serverPort);
- map.computeIfAbsent(serverId, v -> new AppClusterServerStateWrapVO().setId(serverId).setIp(serverIp)
- .setPort(serverPort).setBelongToApp(false));
+ map.computeIfAbsent(serverId,
+ v -> new AppClusterServerStateWrapVO().setId(serverId)
+ .setIp(serverIp)
+ .setPort(serverPort)
+ .setBelongToApp(false));
}
}
return new ArrayList<>(map.values());
@@ -89,8 +97,11 @@ public final class ClusterEntityUtils {
String ip = stateVO.getIp();
String clientId = ip + '@' + stateVO.getCommandPort();
ClusterClientStateVO clientStateVO = stateVO.getState().getClient();
- map.computeIfAbsent(clientId, v -> new AppClusterClientStateWrapVO().setId(clientId).setIp(ip)
- .setState(clientStateVO).setCommandPort(stateVO.getCommandPort()));
+ map.computeIfAbsent(clientId,
+ v -> new AppClusterClientStateWrapVO().setId(clientId)
+ .setIp(ip)
+ .setState(clientStateVO)
+ .setCommandPort(stateVO.getCommandPort()));
}
}
return new ArrayList<>(map.values());
@@ -108,8 +119,11 @@ public final class ClusterEntityUtils {
String serverAddress = getIp(ip);
int port = stateVO.getState().getServer().getPort();
String targetAddress = serverAddress + ":" + port;
- map.computeIfAbsent(targetAddress, v -> new ClusterGroupEntity().setBelongToApp(true)
- .setMachineId(ip + '@' + stateVO.getCommandPort()).setIp(ip).setPort(port));
+ map.computeIfAbsent(targetAddress,
+ v -> new ClusterGroupEntity().setBelongToApp(true)
+ .setMachineId(ip + '@' + stateVO.getCommandPort())
+ .setIp(ip)
+ .setPort(port));
}
}
for (ClusterUniversalStatePairVO stateVO : list) {
@@ -122,8 +136,11 @@ public final class ClusterEntityUtils {
continue;
}
String targetAddress = targetServer + ":" + targetPort;
- ClusterGroupEntity group = map.computeIfAbsent(targetAddress, v -> new ClusterGroupEntity()
- .setBelongToApp(true).setMachineId(targetServer).setIp(targetServer).setPort(targetPort));
+ ClusterGroupEntity group = map.computeIfAbsent(targetAddress,
+ v -> new ClusterGroupEntity().setBelongToApp(true)
+ .setMachineId(targetServer)
+ .setIp(targetServer)
+ .setPort(targetPort));
group.getClientSet().add(ip + '@' + stateVO.getCommandPort());
}
}
diff --git a/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml b/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml
index f70cb932358fae68bcbc36b2ab0946d5e8feffa5..d88c2d1be2f0430d144ea0f64c8497a828dbd9c3 100755
--- a/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml
+++ b/pig-visual/pig-sentinel-dashboard/src/main/resources/application.yml
@@ -9,6 +9,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
diff --git a/pig-visual/pig-xxl-job-admin/pom.xml b/pig-visual/pig-xxl-job-admin/pom.xml
index 098b2cdaa043ec2adff906a12e51cadd321678e6..1478ed7026f28fbb5717c7ce83c6cee8a0db5d51 100644
--- a/pig-visual/pig-xxl-job-admin/pom.xml
+++ b/pig-visual/pig-xxl-job-admin/pom.xml
@@ -4,7 +4,7 @@
com.pig4cloud
pig-visual
- 3.6.4
+ 3.6.7
pig-xxl-job-admin
@@ -95,9 +95,11 @@
src/main/resources
true
- sta**/*.woff
+ **/*.woff
**/*.woff2
+ **/*.otf
**/*.ttf
+ **/*.eot
@@ -107,6 +109,8 @@
**/*.woff
**/*.woff2
**/*.ttf
+ **/*.otf
+ **/*.eot
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
index 7c5be8e64a6891c33fd5d3956a34a368d0dac68f..4bea237be39f1de9a86b7d890d664531f8197709 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
@@ -49,8 +49,9 @@ public class JobApiController {
}
if (XxlJobAdminConfig.getAdminConfig().getAccessToken() != null
&& XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length() > 0
- && !XxlJobAdminConfig.getAdminConfig().getAccessToken()
- .equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
+ && !XxlJobAdminConfig.getAdminConfig()
+ .getAccessToken()
+ .equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
return new ReturnT(ReturnT.FAIL_CODE, "The access token is wrong.");
}
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
old mode 100755
new mode 100644
index f52e941bdfab932eb570d3533116840b735a7b77..87c5da426f324a7f2ee883e73f8e7149ecae0214
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
@@ -1,5 +1,6 @@
package com.xxl.job.admin.controller;
+import com.xxl.job.admin.controller.annotation.PermissionLimit;
import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobRegistry;
import com.xxl.job.admin.core.util.I18nUtil;
@@ -37,12 +38,14 @@ public class JobGroupController {
private XxlJobRegistryDao xxlJobRegistryDao;
@RequestMapping
+ @PermissionLimit(adminuser = true)
public String index(Model model) {
return "jobgroup/jobgroup.index";
}
@RequestMapping("/pageList")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public Map pageList(HttpServletRequest request,
@RequestParam(required = false, defaultValue = "0") int start,
@RequestParam(required = false, defaultValue = "10") int length, String appname, String title) {
@@ -61,6 +64,7 @@ public class JobGroupController {
@RequestMapping("/save")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT save(XxlJobGroup xxlJobGroup) {
// valid
@@ -107,6 +111,7 @@ public class JobGroupController {
@RequestMapping("/update")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT update(XxlJobGroup xxlJobGroup) {
// valid
if (xxlJobGroup.getAppname() == null || xxlJobGroup.getAppname().trim().length() == 0) {
@@ -177,6 +182,7 @@ public class JobGroupController {
@RequestMapping("/remove")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT remove(int id) {
// valid
@@ -196,6 +202,7 @@ public class JobGroupController {
@RequestMapping("/loadById")
@ResponseBody
+ @PermissionLimit(adminuser = true)
public ReturnT loadById(int id) {
XxlJobGroup jobGroup = xxlJobGroupDao.load(id);
return jobGroup != null ? new ReturnT(jobGroup)
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
old mode 100755
new mode 100644
index d7225dd124717fe8839c1f09d36db9172b6f2ea9..8aad8291d137983663e81da3226ec9edf272a294
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
@@ -138,23 +138,29 @@ public class JobLogController {
model.addAttribute("triggerCode", jobLog.getTriggerCode());
model.addAttribute("handleCode", jobLog.getHandleCode());
- model.addAttribute("executorAddress", jobLog.getExecutorAddress());
- model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
model.addAttribute("logId", jobLog.getId());
return "joblog/joblog.detail";
}
@RequestMapping("/logDetailCat")
@ResponseBody
- public ReturnT logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum) {
+ public ReturnT logDetailCat(long logId, int fromLineNum) {
try {
- ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress);
- ReturnT logResult = executorBiz.log(new LogParam(triggerTime, logId, fromLineNum));
+ // valid
+ XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve
+ // performance
+ if (jobLog == null) {
+ return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid"));
+ }
+
+ // log cat
+ ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress());
+ ReturnT logResult = executorBiz
+ .log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum));
// is end
if (logResult.getContent() != null
&& logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
- XxlJobLog jobLog = xxlJobLogDao.load(logId);
if (jobLog.getHandleCode() > 0) {
logResult.getContent().setEnd(true);
}
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
index 1b3fcf1eef522ca1511ba70859dc815b26cbc84a..e60ea1ccccffc8d7bb76e147cf31510cdfa9bca4 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
@@ -7,6 +7,7 @@ import java.lang.annotation.Target;
/**
* 权限限制
+ *
* @author xuxueli 2015-12-12 18:29:02
*/
@Target(ElementType.METHOD)
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
index 4c52796e66b97a8d2c7f8aa88213c43acaf27d01..869eb1d393cd916d2a754d316c9073a8cf205045 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
@@ -49,8 +49,9 @@ public class EmailJobAlarm implements JobAlarm {
}
// email info
- XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao()
- .load(Integer.valueOf(info.getJobGroup()));
+ XxlJobGroup group = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobGroupDao()
+ .load(Integer.valueOf(info.getJobGroup()));
String personal = I18nUtil.getString("admin_name_full");
String title = I18nUtil.getString("jobconf_monitor");
String content = MessageFormat.format(loadEmailJobAlarmTemplate(),
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
index 92e50d158ffc9ba5b1e1a38c264b158ce9787047..435ac1fe9dd7f17e719fbb4d84aae122c00c37af 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
@@ -47,8 +47,9 @@ public class XxlJobCompleter {
// 1、handle success, to trigger child job
String triggerChildMsg = null;
if (XxlJobContext.HANDLE_CODE_SUCCESS == xxlJobLog.getHandleCode()) {
- XxlJobInfo xxlJobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao()
- .loadById(xxlJobLog.getJobId());
+ XxlJobInfo xxlJobInfo = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobInfoDao()
+ .loadById(xxlJobLog.getJobId());
if (xxlJobInfo != null && xxlJobInfo.getChildJobId() != null
&& xxlJobInfo.getChildJobId().trim().length() > 0) {
triggerChildMsg = "
>>>>>>>>>>>"
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
index 530d6dbf8b3392b96f677d60d694a76e725efbcc..3a5dd759e41a31e6591450196b0747c0d2485ecc 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
@@ -30,9 +30,13 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
idleBeatResult = new ReturnT(ReturnT.FAIL_CODE, "" + e);
}
idleBeatResultSB.append((idleBeatResultSB.length() > 0) ? "
" : "")
- .append(I18nUtil.getString("jobconf_idleBeat") + ":").append("
address:").append(address)
- .append("
code:").append(idleBeatResult.getCode()).append("
msg:")
- .append(idleBeatResult.getMsg());
+ .append(I18nUtil.getString("jobconf_idleBeat") + ":")
+ .append("
address:")
+ .append(address)
+ .append("
code:")
+ .append(idleBeatResult.getCode())
+ .append("
msg:")
+ .append(idleBeatResult.getMsg());
// beat success
if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
index 0889e3d30415ef43089011c0f5de73bf08333dc3..f6d815188bcef792c963c0d8268eccb460166f20 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
@@ -30,8 +30,13 @@ public class ExecutorRouteFailover extends ExecutorRouter {
beatResult = new ReturnT(ReturnT.FAIL_CODE, "" + e);
}
beatResultSB.append((beatResultSB.length() > 0) ? "
" : "")
- .append(I18nUtil.getString("jobconf_beat") + ":").append("
address:").append(address)
- .append("
code:").append(beatResult.getCode()).append("
msg:").append(beatResult.getMsg());
+ .append(I18nUtil.getString("jobconf_beat") + ":")
+ .append("
address:")
+ .append(address)
+ .append("
code:")
+ .append(beatResult.getCode())
+ .append("
msg:")
+ .append(beatResult.getMsg());
// beat success
if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
index 52abfe8989d6f215cdfd1b882322679624c1e874..4c57b120d51798bb0e2850a7c9cf329950e59f8c 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
@@ -76,8 +76,9 @@ public class JobCompleteHelper {
try {
// 任务结果丢失处理:调度记录停留在 "运行中" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败;
Date losedTime = DateUtil.addMinutes(new Date(), -10);
- List losedJobIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao()
- .findLostJobIds(losedTime);
+ List losedJobIds = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .findLostJobIds(losedTime);
if (losedJobIds != null && losedJobIds.size() > 0) {
for (Long logId : losedJobIds) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
index 79863a0df23a6897e219cc7ed07e81ed7a8df1cc..dc7156b6ce5b0d3fcb9f15c87b0af10d828c1906 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
@@ -42,20 +42,23 @@ public class JobFailMonitorHelper {
while (!toStop) {
try {
- List failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao()
- .findFailJobLogIds(1000);
+ List failLogIds = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .findFailJobLogIds(1000);
if (failLogIds != null && !failLogIds.isEmpty()) {
for (long failLogId : failLogIds) {
// lock log
- int lockRet = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao()
- .updateAlarmStatus(failLogId, 0, -1);
+ int lockRet = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .updateAlarmStatus(failLogId, 0, -1);
if (lockRet < 1) {
continue;
}
XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(failLogId);
- XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao()
- .loadById(log.getJobId());
+ XxlJobInfo info = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobInfoDao()
+ .loadById(log.getJobId());
// 1、fail retry monitor
if (log.getExecutorFailRetryCount() > 0) {
@@ -72,16 +75,18 @@ public class JobFailMonitorHelper {
// 2、fail alarm monitor
int newAlarmStatus = 0; // 告警状态:0-默认、-1=锁定状态、1-无需告警、2-告警成功、3-告警失败
if (info != null) {
- boolean alarmResult = XxlJobAdminConfig.getAdminConfig().getJobAlarmer().alarm(info,
- log);
+ boolean alarmResult = XxlJobAdminConfig.getAdminConfig()
+ .getJobAlarmer()
+ .alarm(info, log);
newAlarmStatus = alarmResult ? 2 : 3;
}
else {
newAlarmStatus = 1;
}
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, -1,
- newAlarmStatus);
+ XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .updateAlarmStatus(failLogId, -1, newAlarmStatus);
}
}
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
index d2c7c38e4e7d9bbd2184d3bfaa75e32a079025a6..93b1b089a449d868cd124f43bc6b77adb47256c5 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
@@ -70,8 +70,9 @@ public class JobLogReportHelper {
xxlJobLogReport.setSucCount(0);
xxlJobLogReport.setFailCount(0);
- Map triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao()
- .findLogReport(todayFrom, todayTo);
+ Map triggerCountMap = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .findLogReport(todayFrom, todayTo);
if (triggerCountMap != null && triggerCountMap.size() > 0) {
int triggerDayCount = triggerCountMap.containsKey("triggerDayCount")
? Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))) : 0;
@@ -89,8 +90,9 @@ public class JobLogReportHelper {
}
// do refresh
- int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao()
- .update(xxlJobLogReport);
+ int ret = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogReportDao()
+ .update(xxlJobLogReport);
if (ret < 1) {
XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport);
}
@@ -120,8 +122,9 @@ public class JobLogReportHelper {
// clean expired log
List logIds = null;
do {
- logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0,
- clearBeforeTime, 0, 1000);
+ logIds = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobLogDao()
+ .findClearLogIds(0, 0, clearBeforeTime, 0, 1000);
if (logIds != null && logIds.size() > 0) {
XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds);
}
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
index 27d39219b3d8764914ecfcaf10bbea69518177b0..967b4d0af87c08732fd9d6e9694c5373efbb8fcc 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
@@ -60,21 +60,24 @@ public class JobRegistryHelper {
while (!toStop) {
try {
// auto registry group
- List groupList = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao()
- .findByAddressType(0);
+ List groupList = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobGroupDao()
+ .findByAddressType(0);
if (groupList != null && !groupList.isEmpty()) {
// remove dead address (admin/executor)
- List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao()
- .findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
+ List ids = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobRegistryDao()
+ .findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
if (ids != null && ids.size() > 0) {
XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
}
// fresh online address (admin/executor)
HashMap> appAddressMap = new HashMap>();
- List list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao()
- .findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
+ List list = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobRegistryDao()
+ .findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
if (list != null) {
for (XxlJobRegistry item : list) {
if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
@@ -165,13 +168,15 @@ public class JobRegistryHelper {
registryOrRemoveThreadPool.execute(new Runnable() {
@Override
public void run() {
- int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().registryUpdate(
- registryParam.getRegistryGroup(), registryParam.getRegistryKey(),
- registryParam.getRegistryValue(), new Date());
- if (ret < 1) {
- XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().registrySave(
- registryParam.getRegistryGroup(), registryParam.getRegistryKey(),
+ int ret = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobRegistryDao()
+ .registryUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(),
registryParam.getRegistryValue(), new Date());
+ if (ret < 1) {
+ XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobRegistryDao()
+ .registrySave(registryParam.getRegistryGroup(), registryParam.getRegistryKey(),
+ registryParam.getRegistryValue(), new Date());
// fresh
freshGroupRegistryInfo(registryParam);
@@ -195,9 +200,10 @@ public class JobRegistryHelper {
registryOrRemoveThreadPool.execute(new Runnable() {
@Override
public void run() {
- int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().registryDelete(
- registryParam.getRegistryGroup(), registryParam.getRegistryKey(),
- registryParam.getRegistryValue());
+ int ret = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobRegistryDao()
+ .registryDelete(registryParam.getRegistryGroup(), registryParam.getRegistryKey(),
+ registryParam.getRegistryValue());
if (ret > 0) {
// fresh
freshGroupRegistryInfo(registryParam);
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
index 3d98bb5cb6cc5b01cba3fc469efbdad97540b1e7..d4f97d83335e8a33e0f4ae36fc4491ceba442995 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
@@ -87,8 +87,9 @@ public class JobScheduleHelper {
// 1、pre read
long nowTime = System.currentTimeMillis();
- List scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao()
- .scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
+ List scheduleList = XxlJobAdminConfig.getAdminConfig()
+ .getXxlJobInfoDao()
+ .scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
if (scheduleList != null && scheduleList.size() > 0) {
// 2、push time-ring
for (XxlJobInfo jobInfo : scheduleList) {
@@ -101,7 +102,7 @@ public class JobScheduleHelper {
// 1、misfire match
MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum
- .match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);
+ .match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);
if (MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum) {
// FIRE_ONCE_NOW 》 trigger
JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null,
@@ -228,7 +229,7 @@ public class JobScheduleHelper {
// pre-read period: success > scan each second; fail > skip
// this period;
TimeUnit.MILLISECONDS
- .sleep((preReadSuc ? 1000 : PRE_READ_MS) - System.currentTimeMillis() % 1000);
+ .sleep((preReadSuc ? 1000 : PRE_READ_MS) - System.currentTimeMillis() % 1000);
}
catch (InterruptedException e) {
if (!scheduleThreadToStop) {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
index 2dd817bad38477654fba67de82e2d63fdb08dc1e..e0b660f18be3bdaa16be75bdcefe4118c8e8b4c7 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
@@ -66,7 +66,7 @@ public class XxlJobTrigger {
}
}
if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == ExecutorRouteStrategyEnum
- .match(jobInfo.getExecutorRouteStrategy(), null) && group.getRegistryList() != null
+ .match(jobInfo.getExecutorRouteStrategy(), null) && group.getRegistryList() != null
&& !group.getRegistryList().isEmpty() && shardingParam == null) {
for (int i = 0; i < group.getRegistryList().size(); i++) {
processTrigger(group, jobInfo, finalFailRetryCount, triggerType, i, group.getRegistryList().size());
@@ -106,7 +106,7 @@ public class XxlJobTrigger {
ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(),
ExecutorBlockStrategyEnum.SERIAL_EXECUTION); // block strategy
ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum
- .match(jobInfo.getExecutorRouteStrategy(), null); // route strategy
+ .match(jobInfo.getExecutorRouteStrategy(), null); // route strategy
String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum)
? String.valueOf(index).concat("/").concat(String.valueOf(total)) : null;
@@ -169,31 +169,45 @@ public class XxlJobTrigger {
// 5、collection trigger info
StringBuffer triggerMsgSb = new StringBuffer();
triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_type")).append(":").append(triggerType.getTitle());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobconf_trigger_admin_adress")).append(":")
- .append(IpUtil.getIp());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append(":")
- .append((group.getAddressType() == 0) ? I18nUtil.getString("jobgroup_field_addressType_0")
- : I18nUtil.getString("jobgroup_field_addressType_1"));
- triggerMsgSb.append("
").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":")
- .append(group.getRegistryList());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":")
- .append(executorRouteStrategyEnum.getTitle());
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobconf_trigger_admin_adress"))
+ .append(":")
+ .append(IpUtil.getIp());
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobconf_trigger_exe_regtype"))
+ .append(":")
+ .append((group.getAddressType() == 0) ? I18nUtil.getString("jobgroup_field_addressType_0")
+ : I18nUtil.getString("jobgroup_field_addressType_1"));
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobconf_trigger_exe_regaddress"))
+ .append(":")
+ .append(group.getRegistryList());
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobinfo_field_executorRouteStrategy"))
+ .append(":")
+ .append(executorRouteStrategyEnum.getTitle());
if (shardingParam != null) {
triggerMsgSb.append("(" + shardingParam + ")");
}
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":")
- .append(blockStrategy.getTitle());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_timeout")).append(":")
- .append(jobInfo.getExecutorTimeout());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":")
- .append(finalFailRetryCount);
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobinfo_field_executorBlockStrategy"))
+ .append(":")
+ .append(blockStrategy.getTitle());
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobinfo_field_timeout"))
+ .append(":")
+ .append(jobInfo.getExecutorTimeout());
+ triggerMsgSb.append("
")
+ .append(I18nUtil.getString("jobinfo_field_executorFailRetryCount"))
+ .append(":")
+ .append(finalFailRetryCount);
triggerMsgSb
- .append("
>>>>>>>>>>>"
- + I18nUtil.getString("jobconf_trigger_run") + "<<<<<<<<<<<
")
- .append((routeAddressResult != null && routeAddressResult.getMsg() != null)
- ? routeAddressResult.getMsg() + "
" : "")
- .append(triggerResult.getMsg() != null ? triggerResult.getMsg() : "");
+ .append("
>>>>>>>>>>>" + I18nUtil.getString("jobconf_trigger_run")
+ + "<<<<<<<<<<<
")
+ .append((routeAddressResult != null && routeAddressResult.getMsg() != null)
+ ? routeAddressResult.getMsg() + "
" : "")
+ .append(triggerResult.getMsg() != null ? triggerResult.getMsg() : "");
// 6、save log trigger-info
jobLog.setExecutorAddress(address);
diff --git a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
index 82e63c9dfda80b8cdde0e86c9c9eb393f5b81891..7ee1830d3a50a0aab4d6eec233a6660776d83da3 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
+++ b/pig-visual/pig-xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
@@ -17,7 +17,7 @@ public class FtlUtil {
private static Logger logger = LoggerFactory.getLogger(FtlUtil.class);
private static BeansWrapper wrapper = new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS)
- .build(); // BeansWrapper.getDefaultInstance();
+ .build(); // BeansWrapper.getDefaultInstance();
public static TemplateHashModel generateStaticModel(String packageName) {
try {
diff --git a/pig-visual/pig-xxl-job-admin/src/main/resources/application.yml b/pig-visual/pig-xxl-job-admin/src/main/resources/application.yml
index 20eccf92a897834573f0d81f8c0fe6f2fbff7367..1de0564052a8dd108d0ae2f07fa83417cc0266ba 100644
--- a/pig-visual/pig-xxl-job-admin/src/main/resources/application.yml
+++ b/pig-visual/pig-xxl-job-admin/src/main/resources/application.yml
@@ -12,6 +12,8 @@ spring:
name: @artifactId@
cloud:
nacos:
+ username: @nacos.username@
+ password: @nacos.password@
discovery:
server-addr: ${NACOS_HOST:pig-register}:${NACOS_PORT:8848}
metadata:
diff --git a/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_en.properties b/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_en.properties
index 001f841a495f030cb829d90f09df408b74d13386..589d9eb4f5115013f5faae030cbcd276e7d23d11 100644
--- a/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_en.properties
+++ b/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_en.properties
@@ -1,6 +1,6 @@
admin_name=Scheduling Center
admin_name_full=Distributed Task Scheduling Platform XXL-JOB
-admin_version=2.3.1
+admin_version=2.4.0
admin_i18n=en
## system
diff --git a/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties
index 69ef6e3d774b095ba98451aaa53bb0d8cf51cd15..fc1d276441e27994c10b00272d5b7f75b8462778 100644
--- a/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties
+++ b/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties
@@ -1,6 +1,6 @@
admin_name=任务调度中心
admin_name_full=分布式任务调度平台XXL-JOB
-admin_version=2.3.1
+admin_version=2.4.0
admin_i18n=
## system
diff --git a/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties
index 35916c0d4be8388f8a13baa9b2eb07ed174b6a98..49d39fd2a2def38bfea733f209da4ce0252af0dc 100755
--- a/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties
+++ b/pig-visual/pig-xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties
@@ -1,6 +1,6 @@
admin_name=任務調度中心
admin_name_full=分布式任務調度平臺XXL-JOB
-admin_version=2.3.1
+admin_version=2.4.0
admin_i18n=
## system
diff --git a/pig-visual/pig-xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js b/pig-visual/pig-xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js
old mode 100755
new mode 100644
index ddefd46631a54e3cc0bcde085a73ba3409d0985f..0638eee275739bfdf038ae8b8197c7ece968dae4
--- a/pig-visual/pig-xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js
+++ b/pig-visual/pig-xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js
@@ -25,8 +25,6 @@ $(function() {
async: false, // sync, make log ordered
url : base_url + '/joblog/logDetailCat',
data : {
- "executorAddress":executorAddress,
- "triggerTime":triggerTime,
"logId":logId,
"fromLineNum":fromLineNum
},
diff --git a/pig-visual/pig-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl b/pig-visual/pig-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl
old mode 100755
new mode 100644
index 3881cfa6ae491b7f21ff84196ad1a444be630ddc..bb8072f978b18c8041533b6aa80db73942bc277c
--- a/pig-visual/pig-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl
+++ b/pig-visual/pig-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl
@@ -62,8 +62,6 @@
// 参数
var triggerCode = '${triggerCode}';
var handleCode = '${handleCode}';
- var executorAddress = '${executorAddress!}';
- var triggerTime = '${triggerTime?c}';
var logId = '${logId}';
diff --git a/pig-visual/pom.xml b/pig-visual/pom.xml
index 7366fa283977820fd9cbc8dc7731c7b8d8278bfd..9469be1b5533ed860e51be970ff8e81bca876980 100755
--- a/pig-visual/pom.xml
+++ b/pig-visual/pom.xml
@@ -21,7 +21,7 @@
com.pig4cloud
pig
- 3.6.4
+ 3.6.7
pig-visual
diff --git a/pom.xml b/pom.xml
index 2ed3732272416d541c24675c5a2fe67a6848259d..82657ebe45788745e6fc3a870b5da4fb1561fc9d 100755
--- a/pom.xml
+++ b/pom.xml
@@ -22,28 +22,28 @@
com.pig4cloud
pig
${project.artifactId}
- 3.6.4
+ 3.6.7
pom
https://www.pig4cloud.com
- 2.7.6
- 2021.0.5
- 2021.0.4.0
+ 2.7.10
+ 2021.0.6
+ 2021.0.5.0
UTF-8
1.8
1.8
- 2.7.9
- 0.4.0
+ 2.7.10
+ 0.4.1
3.6.0
2.2.2
2.3
3.1
1.10
- 2.1.0
+ 3.0.5
3.0.0
3.0.3
- 2.3.1
+ 2.4.0
0.32.0
http://192.168.0.100:2375
192.168.0.100
@@ -51,7 +51,7 @@
username
password
4.9.9
- 0.0.34
+ 0.0.38
@@ -159,13 +159,6 @@
true
-
-
-
- repackage
-
-
-
io.fabric8
@@ -230,15 +223,6 @@
io.spring.javaformat
spring-javaformat-maven-plugin
${spring.checkstyle.plugin}
-
-
- validate
- true
-
- validate
-
-
-
@@ -249,6 +233,8 @@
dev
+ nacos
+ nacos