lixuliang
2024-08-29 3f8fc49de0a57774e8fb51ae015b71c030b36ae8
后台 未修改
已重命名1个文件
已添加8个文件
已修改24个文件
已删除5个文件
2202 ■■■■■ 文件已修改
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/dc.yml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/docker-compose.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/mysql/initdb/se_cloud_20240629.sql 184 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/mysql/initdb/se_config_20231204.sql 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/mysql/initdb/se_quartz.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/mysql/initdb/se_seata_20210128.sql 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/nacos/conf/application.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/nginx/conf/nginx.conf 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-api/se-api-system/src/main/java/com/se/system/api/domain/SysUser.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/pom.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/se-auth.iml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/java/com/se/auth/controller/HealthController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/java/com/se/auth/controller/TokenController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/java/com/se/auth/service/AsyncService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/java/com/se/auth/service/SysPasswordService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/resources/bootstrap.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-cloud.iml 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/constant/TokenConstants.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/utils/AesUtils.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/utils/RsaUtils.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-security/src/main/java/com/se/common/security/utils/SecurityUtils.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-gateway/src/main/java/com/se/gateway/handler/HealthController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-gateway/src/main/java/com/se/gateway/handler/SwaggerHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-gateway/src/main/resources/bootstrap.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/HealthController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysUserController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/ISysPermissionService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysPermissionServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/resources/bootstrap.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/resources/mapper/system/SysUserMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/jg.png 补丁 | 查看 | 原始文档 | blame | 历史
sql/se_cloud_20240629.sql 703 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/se_config_20231204.sql 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/se_quartz.sql 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/se_seata_20210128.sql 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -47,3 +47,4 @@
/logs
*.jar
/docker-compose/nginx/html
/docker-compose/mysql/data
docker-compose/dc.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
version : '3.8'
services:
  # mysql
  se-mysql:
    image: mysql:5.7
    ports:
      - 3307:3306
    volumes:
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/initdb:/docker-entrypoint-initdb.d
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      TZ: Asia/Shanghai
      MYSQL_DATABASE: 'se-cloud'
      MYSQL_ROOT_PASSWORD: My_Sql_s!E_v5.7
    networks:
      - network-se
    restart: always
  # nacos
  se-nacos:
    image: nacos/nacos-server:v2.4.1
    environment:
      MODE: standalone
      TZ: Asia/Shanghai
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
    depends_on:
      - se-mysql
    networks:
      - network-se
    restart: always
  # redis,Redis_s!E_6.2.6
  se-redis:
    image: redis:latest
    ports:
      - 6379:6379
    volumes:
      - ./redis/data/redis.conf:/data/redis.conf
      - ./redis/data:/data
    command: redis-server /data/redis.conf
    networks:
      - network-se
    restart: always
# networks
networks:
  network-se:
    driver: bridge
docker-compose/docker-compose.yml
@@ -22,6 +22,8 @@
      TZ: Asia/Shanghai
      MYSQL_DATABASE: 'se-cloud'
      MYSQL_ROOT_PASSWORD: My_Sql_s!E_v5.7
    networks:
      - network-se
    restart: always
  # nacos
  se-nacos:
@@ -38,8 +40,10 @@
      - 9849:9849
    depends_on:
      - se-mysql
    networks:
      - network-se
    restart: always
  # redis
  # redis,Redis_s!E_6.2.6
  se-redis:
    image: redis:latest
    ports:
@@ -48,6 +52,8 @@
      - ./redis/data/redis.conf:/data/redis.conf
      - ./redis/data:/data
    command: redis-server /data/redis.conf
    networks:
      - network-se
    restart: always
  # gateway
  se-gateway:
@@ -65,6 +71,8 @@
    links:
      - se-redis
      - se-nacos
    networks:
      - network-se
    restart: always
  # auth
  se-auth:
@@ -79,6 +87,8 @@
    depends_on:
      - se-redis
      - se-nacos
    networks:
      - network-se
    restart: always
  # system
  se-system:
@@ -94,6 +104,8 @@
      - se-redis
      - se-nacos
      - se-mysql
    networks:
      - network-se
    restart: always
  # nginx
  se-nginx:
@@ -109,4 +121,10 @@
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - se-gateway
    networks:
      - network-se
    restart: always
# networks
networks:
  network-se:
    driver: bridge
docker-compose/mysql/initdb/se_cloud_20240629.sql
@@ -53,6 +53,7 @@
  user_name         varchar(30)     not null                   comment '用户账号',
  nick_name         varchar(30)     not null                   comment '用户昵称',
  user_type         varchar(2)      default '00'               comment '用户类型(00系统用户)',
  secret_level      varchar(2)      default '1'                comment '密级类型',
  email             varchar(50)     default ''                 comment '用户邮箱',
  phonenumber       varchar(11)     default ''                 comment '手机号码',
  sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
@@ -73,9 +74,9 @@
-- ----------------------------
-- åˆå§‹åŒ–-用户信息表数据
-- ----------------------------
insert into sys_user values(1,  103, 'admin', '', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员');
insert into sys_user values(2,  105, 'ry',    '', '00', 'ry@qq.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
insert into sys_user values(1,  103, 'admin', '', '00', '1', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员');
insert into sys_user values(2,  105, 'ry',    '', '00', '1', 'ry@qq.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
-- select * from sys_user;
-- ----------------------------
-- 3、岗位信息表
@@ -125,14 +126,17 @@
  update_time          datetime                                   comment '更新时间',
  remark               varchar(500)    default null               comment '备注',
  primary key (role_id)
) engine=innodb auto_increment=3 comment = '角色信息表';
) engine=innodb auto_increment=6 comment = '角色信息表';
-- ----------------------------
-- åˆå§‹åŒ–-角色信息表数据
-- ----------------------------
insert into sys_role values('1', '超级管理员',  'admin',  1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员');
insert into sys_role values('2', '普通角色',    'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '普通角色');
insert into sys_role values('1', '系统管理员',  'admin',  1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '系统管理员');
insert into sys_role values('2', '超级用户', 'superuser', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级用户');
insert into sys_role values('3', '普通用户',    'common', 3, 4, 1, 1, '0', '0', 'admin', sysdate(), '', null, '普通用户');
insert into sys_role values('4', '受限用户',   'limited', 4, 4, 1, 1, '0', '0', 'admin', sysdate(), '', null, '受限用户');
insert into sys_role values('5', '只读用户',  'readonly', 5, 4, 1, 1, '0', '0', 'admin', sysdate(), '', null, '只读用户');
-- select * from sys_role;
-- ----------------------------
-- 5、菜单权限表
@@ -167,9 +171,9 @@
-- ----------------------------
-- ä¸€çº§èœå•
insert into sys_menu values('1', '系统管理', '0', '1', 'system',           null, '', '', 1, 0, 'M', '0', '0', '', 'system',   'admin', sysdate(), '', null, '系统管理目录');
insert into sys_menu values('2', '系统监控', '0', '2', 'monitor',          null, '', '', 1, 0, 'M', '0', '0', '', 'monitor',  'admin', sysdate(), '', null, '系统监控目录');
insert into sys_menu values('3', '系统工具', '0', '3', 'tool',             null, '', '', 1, 0, 'M', '0', '0', '', 'tool',     'admin', sysdate(), '', null, '系统工具目录');
insert into sys_menu values('4', '官网', '0', '4', 'http://se.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide',    'admin', sysdate(), '', null, '官网地址');
-- insert into sys_menu values('2', '系统监控', '0', '2', 'monitor',          null, '', '', 1, 0, 'M', '0', '0', '', 'monitor',  'admin', sysdate(), '', null, '系统监控目录');
-- insert into sys_menu values('3', '系统工具', '0', '3', 'tool',             null, '', '', 1, 0, 'M', '0', '0', '', 'tool',     'admin', sysdate(), '', null, '系统工具目录');
-- insert into sys_menu values('4', '官网', '0', '4', 'http://se.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide',    'admin', sysdate(), '', null, '官网地址');
-- äºŒçº§èœå•
insert into sys_menu values('100',  '用户管理',       '1',   '1', 'user',       'system/user/index',                 '', '', 1, 0, 'C', '0', '0', 'system:user:list',        'user',          'admin', sysdate(), '', null, '用户管理菜单');
insert into sys_menu values('101',  '角色管理',       '1',   '2', 'role',       'system/role/index',                 '', '', 1, 0, 'C', '0', '0', 'system:role:list',        'peoples',       'admin', sysdate(), '', null, '角色管理菜单');
@@ -177,17 +181,17 @@
insert into sys_menu values('103',  '部门管理',       '1',   '4', 'dept',       'system/dept/index',                 '', '', 1, 0, 'C', '0', '0', 'system:dept:list',        'tree',          'admin', sysdate(), '', null, '部门管理菜单');
insert into sys_menu values('104',  '岗位管理',       '1',   '5', 'post',       'system/post/index',                 '', '', 1, 0, 'C', '0', '0', 'system:post:list',        'post',          'admin', sysdate(), '', null, '岗位管理菜单');
insert into sys_menu values('105',  '字典管理',       '1',   '6', 'dict',       'system/dict/index',                 '', '', 1, 0, 'C', '0', '0', 'system:dict:list',        'dict',          'admin', sysdate(), '', null, '字典管理菜单');
insert into sys_menu values('106',  '参数设置',       '1',   '7', 'config',     'system/config/index',               '', '', 1, 0, 'C', '0', '0', 'system:config:list',      'edit',          'admin', sysdate(), '', null, '参数设置菜单');
insert into sys_menu values('107',  '通知公告',       '1',   '8', 'notice',     'system/notice/index',               '', '', 1, 0, 'C', '0', '0', 'system:notice:list',      'message',       'admin', sysdate(), '', null, '通知公告菜单');
-- insert into sys_menu values('106',  '参数设置',       '1',   '7', 'config',     'system/config/index',               '', '', 1, 0, 'C', '0', '0', 'system:config:list',      'edit',          'admin', sysdate(), '', null, '参数设置菜单');
-- insert into sys_menu values('107',  '通知公告',       '1',   '8', 'notice',     'system/notice/index',               '', '', 1, 0, 'C', '0', '0', 'system:notice:list',      'message',       'admin', sysdate(), '', null, '通知公告菜单');
insert into sys_menu values('108',  '日志管理',       '1',   '9', 'log',        '',                                  '', '', 1, 0, 'M', '0', '0', '',                        'log',           'admin', sysdate(), '', null, '日志管理菜单');
insert into sys_menu values('109',  '在线用户',       '2',   '1', 'online',     'monitor/online/index',              '', '', 1, 0, 'C', '0', '0', 'monitor:online:list',     'online',        'admin', sysdate(), '', null, '在线用户菜单');
insert into sys_menu values('110',  '定时任务',       '2',   '2', 'job',        'monitor/job/index',                 '', '', 1, 0, 'C', '0', '0', 'monitor:job:list',        'job',           'admin', sysdate(), '', null, '定时任务菜单');
insert into sys_menu values('111',  'Sentinel控制台', '2',   '3', 'http://localhost:8718',        '',                '', '', 0, 0, 'C', '0', '0', 'monitor:sentinel:list',   'sentinel',      'admin', sysdate(), '', null, '流量控制菜单');
insert into sys_menu values('112',  'Nacos控制台',    '2',   '4', 'http://localhost:8848/nacos',  '',                '', '', 0, 0, 'C', '0', '0', 'monitor:nacos:list',      'nacos',         'admin', sysdate(), '', null, '服务治理菜单');
insert into sys_menu values('113',  'Admin控制台',    '2',   '5', 'http://localhost:9100/login',  '',                '', '', 0, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', sysdate(), '', null, '服务监控菜单');
insert into sys_menu values('114',  '表单构建',       '3',   '1', 'build',      'tool/build/index',                  '', '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate(), '', null, '表单构建菜单');
insert into sys_menu values('115',  '代码生成',       '3',   '2', 'gen',        'tool/gen/index',                    '', '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate(), '', null, '代码生成菜单');
insert into sys_menu values('116',  '系统接口',       '3',   '3', 'http://localhost:8080/swagger-ui/index.html', '', '', '', 0, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate(), '', null, '系统接口菜单');
-- insert into sys_menu values('109',  '在线用户',       '2',   '1', 'online',     'monitor/online/index',              '', '', 1, 0, 'C', '0', '0', 'monitor:online:list',     'online',        'admin', sysdate(), '', null, '在线用户菜单');
-- insert into sys_menu values('110',  '定时任务',       '2',   '2', 'job',        'monitor/job/index',                 '', '', 1, 0, 'C', '0', '0', 'monitor:job:list',        'job',           'admin', sysdate(), '', null, '定时任务菜单');
-- insert into sys_menu values('111',  'Sentinel控制台', '2',   '3', 'http://localhost:8718',        '',                '', '', 0, 0, 'C', '0', '0', 'monitor:sentinel:list',   'sentinel',      'admin', sysdate(), '', null, '流量控制菜单');
-- insert into sys_menu values('112',  'Nacos控制台',    '2',   '4', 'http://localhost:8848/nacos',  '',                '', '', 0, 0, 'C', '0', '0', 'monitor:nacos:list',      'nacos',         'admin', sysdate(), '', null, '服务治理菜单');
-- insert into sys_menu values('113',  'Admin控制台',    '2',   '5', 'http://localhost:9100/login',  '',                '', '', 0, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', sysdate(), '', null, '服务监控菜单');
-- insert into sys_menu values('114',  '表单构建',       '3',   '1', 'build',      'tool/build/index',                  '', '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate(), '', null, '表单构建菜单');
-- insert into sys_menu values('115',  '代码生成',       '3',   '2', 'gen',        'tool/gen/index',                    '', '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate(), '', null, '代码生成菜单');
-- insert into sys_menu values('116',  '系统接口',       '3',   '3', 'http://localhost:8080/swagger-ui/index.html', '', '', '', 0, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate(), '', null, '系统接口菜单');
-- ä¸‰çº§èœå•
insert into sys_menu values('500',  '操作日志', '108', '1', 'operlog',    'system/operlog/index',    '', '', 1, 0, 'C', '0', '0', 'system:operlog:list',    'form',          'admin', sysdate(), '', null, '操作日志菜单');
insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'system/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'system:logininfor:list', 'logininfor',    'admin', sysdate(), '', null, '登录日志菜单');
@@ -228,16 +232,16 @@
insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove',         '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:export',         '#', 'admin', sysdate(), '', null, '');
-- å‚数设置按钮
insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query',        '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add',          '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit',         '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove',       '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export',       '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query',        '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add',          '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit',         '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove',       '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export',       '#', 'admin', sysdate(), '', null, '');
-- é€šçŸ¥å…¬å‘ŠæŒ‰é’®
insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query',        '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add',          '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit',         '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove',       '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query',        '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add',          '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit',         '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove',       '#', 'admin', sysdate(), '', null, '');
-- æ“ä½œæ—¥å¿—按钮
insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:operlog:query',       '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:operlog:remove',      '#', 'admin', sysdate(), '', null, '');
@@ -248,23 +252,23 @@
insert into sys_menu values('1044', '日志导出', '501', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:logininfor:export',   '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1045', '账户解锁', '501', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:logininfor:unlock',   '#', 'admin', sysdate(), '', null, '');
-- åœ¨çº¿ç”¨æˆ·æŒ‰é’®
insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, '');
-- å®šæ—¶ä»»åŠ¡æŒ‰é’®
insert into sys_menu values('1049', '任务查询', '110', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query',          '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1050', '任务新增', '110', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add',            '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1051', '任务修改', '110', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit',           '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1052', '任务删除', '110', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove',         '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1053', '状态修改', '110', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus',   '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1054', '任务导出', '110', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export',         '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1049', '任务查询', '110', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query',          '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1050', '任务新增', '110', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add',            '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1051', '任务修改', '110', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit',           '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1052', '任务删除', '110', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove',         '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1053', '状态修改', '110', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus',   '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1054', '任务导出', '110', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export',         '#', 'admin', sysdate(), '', null, '');
-- ä»£ç ç”ŸæˆæŒ‰é’®
insert into sys_menu values('1055', '生成查询', '115', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1056', '生成修改', '115', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1057', '生成删除', '115', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1058', '导入代码', '115', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1059', '预览代码', '115', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', sysdate(), '', null, '');
insert into sys_menu values('1060', '生成代码', '115', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1055', '生成查询', '115', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1056', '生成修改', '115', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1057', '生成删除', '115', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1058', '导入代码', '115', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1059', '预览代码', '115', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', sysdate(), '', null, '');
-- insert into sys_menu values('1060', '生成代码', '115', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', sysdate(), '', null, '');
-- ----------------------------
@@ -298,26 +302,26 @@
-- åˆå§‹åŒ–-角色和菜单关联表数据
-- ----------------------------
insert into sys_role_menu values ('2', '1');
insert into sys_role_menu values ('2', '2');
insert into sys_role_menu values ('2', '3');
insert into sys_role_menu values ('2', '4');
-- insert into sys_role_menu values ('2', '2');
-- insert into sys_role_menu values ('2', '3');
-- insert into sys_role_menu values ('2', '4');
insert into sys_role_menu values ('2', '100');
insert into sys_role_menu values ('2', '101');
insert into sys_role_menu values ('2', '102');
insert into sys_role_menu values ('2', '103');
insert into sys_role_menu values ('2', '104');
insert into sys_role_menu values ('2', '105');
insert into sys_role_menu values ('2', '106');
insert into sys_role_menu values ('2', '107');
-- insert into sys_role_menu values ('2', '106');
-- insert into sys_role_menu values ('2', '107');
insert into sys_role_menu values ('2', '108');
insert into sys_role_menu values ('2', '109');
insert into sys_role_menu values ('2', '110');
insert into sys_role_menu values ('2', '111');
insert into sys_role_menu values ('2', '112');
insert into sys_role_menu values ('2', '113');
insert into sys_role_menu values ('2', '114');
insert into sys_role_menu values ('2', '115');
insert into sys_role_menu values ('2', '116');
-- insert into sys_role_menu values ('2', '109');
-- insert into sys_role_menu values ('2', '110');
-- insert into sys_role_menu values ('2', '111');
-- insert into sys_role_menu values ('2', '112');
-- insert into sys_role_menu values ('2', '113');
-- insert into sys_role_menu values ('2', '114');
-- insert into sys_role_menu values ('2', '115');
-- insert into sys_role_menu values ('2', '116');
insert into sys_role_menu values ('2', '500');
insert into sys_role_menu values ('2', '501');
insert into sys_role_menu values ('2', '1000');
@@ -350,15 +354,15 @@
insert into sys_role_menu values ('2', '1027');
insert into sys_role_menu values ('2', '1028');
insert into sys_role_menu values ('2', '1029');
insert into sys_role_menu values ('2', '1030');
insert into sys_role_menu values ('2', '1031');
insert into sys_role_menu values ('2', '1032');
insert into sys_role_menu values ('2', '1033');
insert into sys_role_menu values ('2', '1034');
insert into sys_role_menu values ('2', '1035');
insert into sys_role_menu values ('2', '1036');
insert into sys_role_menu values ('2', '1037');
insert into sys_role_menu values ('2', '1038');
-- insert into sys_role_menu values ('2', '1030');
-- insert into sys_role_menu values ('2', '1031');
-- insert into sys_role_menu values ('2', '1032');
-- insert into sys_role_menu values ('2', '1033');
-- insert into sys_role_menu values ('2', '1034');
-- insert into sys_role_menu values ('2', '1035');
-- insert into sys_role_menu values ('2', '1036');
-- insert into sys_role_menu values ('2', '1037');
-- insert into sys_role_menu values ('2', '1038');
insert into sys_role_menu values ('2', '1039');
insert into sys_role_menu values ('2', '1040');
insert into sys_role_menu values ('2', '1041');
@@ -366,21 +370,21 @@
insert into sys_role_menu values ('2', '1043');
insert into sys_role_menu values ('2', '1044');
insert into sys_role_menu values ('2', '1045');
insert into sys_role_menu values ('2', '1046');
insert into sys_role_menu values ('2', '1047');
insert into sys_role_menu values ('2', '1048');
insert into sys_role_menu values ('2', '1049');
insert into sys_role_menu values ('2', '1050');
insert into sys_role_menu values ('2', '1051');
insert into sys_role_menu values ('2', '1052');
insert into sys_role_menu values ('2', '1053');
insert into sys_role_menu values ('2', '1054');
insert into sys_role_menu values ('2', '1055');
insert into sys_role_menu values ('2', '1056');
insert into sys_role_menu values ('2', '1057');
insert into sys_role_menu values ('2', '1058');
insert into sys_role_menu values ('2', '1059');
insert into sys_role_menu values ('2', '1060');
-- insert into sys_role_menu values ('2', '1046');
-- insert into sys_role_menu values ('2', '1047');
-- insert into sys_role_menu values ('2', '1048');
-- insert into sys_role_menu values ('2', '1049');
-- insert into sys_role_menu values ('2', '1050');
-- insert into sys_role_menu values ('2', '1051');
-- insert into sys_role_menu values ('2', '1052');
-- insert into sys_role_menu values ('2', '1053');
-- insert into sys_role_menu values ('2', '1054');
-- insert into sys_role_menu values ('2', '1055');
-- insert into sys_role_menu values ('2', '1056');
-- insert into sys_role_menu values ('2', '1057');
-- insert into sys_role_menu values ('2', '1058');
-- insert into sys_role_menu values ('2', '1059');
-- insert into sys_role_menu values ('2', '1060');
-- ----------------------------
-- 8、角色和部门关联表  è§’色1-N部门
@@ -464,7 +468,7 @@
  remark           varchar(500)    default null               comment '备注',
  primary key (dict_id),
  unique (dict_type)
) engine=innodb auto_increment=11 comment = '字典类型表';
) engine=innodb auto_increment=13 comment = '字典类型表';
insert into sys_dict_type values(1,  '用户性别', 'sys_user_sex',        '0', 'admin', sysdate(), '', null, '用户性别列表');
insert into sys_dict_type values(2,  '菜单状态', 'sys_show_hide',       '0', 'admin', sysdate(), '', null, '菜单状态列表');
@@ -476,7 +480,9 @@
insert into sys_dict_type values(8,  '通知状态', 'sys_notice_status',   '0', 'admin', sysdate(), '', null, '通知状态列表');
insert into sys_dict_type values(9,  '操作类型', 'sys_oper_type',       '0', 'admin', sysdate(), '', null, '操作类型列表');
insert into sys_dict_type values(10, '系统状态', 'sys_common_status',   '0', 'admin', sysdate(), '', null, '登录状态列表');
insert into sys_dict_type values(11, '加密类型', 'sys_encryption_method','0', 'admin', sysdate(), '', null, '加密类型列表');
insert into sys_dict_type values(12, '密级类型', 'sys_secret_level',    '0', 'admin', sysdate(), '', null, '密级类型列表');
-- select * from sys_dict_type;
-- ----------------------------
-- 12、字典数据表
@@ -499,7 +505,7 @@
  update_time      datetime                                   comment '更新时间',
  remark           varchar(500)    default null               comment '备注',
  primary key (dict_code)
) engine=innodb auto_increment=30 comment = '字典数据表';
) engine=innodb auto_increment=37 comment = '字典数据表';
insert into sys_dict_data values(1,  1,  '男',       '0',       'sys_user_sex',        '',   '',        'Y', '0', 'admin', sysdate(), '', null, '性别男');
insert into sys_dict_data values(2,  2,  '女',       '1',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别女');
@@ -530,7 +536,15 @@
insert into sys_dict_data values(27, 9,  '清空数据', '9',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '清空操作');
insert into sys_dict_data values(28, 1,  '成功',     '0',       'sys_common_status',   '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态');
insert into sys_dict_data values(29, 2,  '失败',     '1',       'sys_common_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
-- https://blog.csdn.net/weixin_56154577/article/details/136803617
insert into sys_dict_data values(30, 1,  'AES加密',     '1',  'sys_encryption_method', '',  '',  'Y', '0', 'admin', sysdate(), '', null, 'AES加密算法');
insert into sys_dict_data values(31, 2,  'DES加密',     '2',  'sys_encryption_method', '',  '',  'N', '0', 'admin', sysdate(), '', null, 'DES加密算法');
insert into sys_dict_data values(32, 3,  'RSA加密',     '3',   'sys_encryption_method', '',  '',  'N', '0', 'admin', sysdate(), '', null, 'RSA加密算法');
insert into sys_dict_data values(33, 1,  '公开',     '1',      'sys_secret_level', '',  '',  'Y', '0', 'admin', sysdate(), '', null, '公开密级');
insert into sys_dict_data values(34, 2,  '一般',     '2',      'sys_secret_level', '',  '',  'N', '0', 'admin', sysdate(), '', null, '一般密级');
insert into sys_dict_data values(35, 3,  '重要',     '3',      'sys_secret_level', '',  '',  'N', '0', 'admin', sysdate(), '', null, '重要密级');
insert into sys_dict_data values(36, 4,  '核心',     '4',      'sys_secret_level', '',  '',  'N', '0', 'admin', sysdate(), '', null, '核心密级');
-- select * from sys_dict_data;
-- ----------------------------
-- 13、参数配置表
docker-compose/mysql/initdb/se_config_20231204.sql
@@ -1,6 +1,6 @@
DROP DATABASE IF EXISTS `se-config`;
-- DROP DATABASE IF EXISTS `se-config`;
CREATE DATABASE  `se-config` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE IF NOT EXISTS `se-config` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
@@ -34,7 +34,7 @@
insert into config_info(id, data_id, group_id, content, md5, gmt_create, gmt_modified, src_user, src_ip, app_name, tenant_id, c_desc, c_use, effect, type, c_schema, encrypted_data_key) values 
(1,'application-dev.yml','DEFAULT_GROUP','spring:\n  autoconfigure:\n    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\n  mvc:\n    pathmatch:\n      matching-strategy: ant_path_matcher\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      min-request-size: 8192\n    response:\n      enabled: true\n\n# æš´éœ²ç›‘控端点\nmanagement:\n  endpoints:\n    web:\n      exposure:\n        include: \'*\'\n','58dde4e3760499d3bac2d77a3a1e9018','2020-05-20 12:00:00','2023-12-04 08:08:23','nacos','0:0:0:0:0:0:0:1','','','通用配置','null','null','yaml','',''),
(2,'se-gateway-dev.yml','DEFAULT_GROUP','spring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n  cloud:\n    gateway:\n      discovery:\n        locator:\n          lowerCaseServiceId: true\n          enabled: true\n      routes:\n        # è®¤è¯ä¸­å¿ƒ\n        - id: se-auth\n          uri: lb://se-auth\n          predicates:\n            - Path=/auth/**\n          filters:\n            # éªŒè¯ç å¤„理\n            - CacheRequestFilter\n            - ValidateCodeFilter\n            - StripPrefix=1\n        # ä»£ç ç”Ÿæˆ\n        - id: se-gen\n          uri: lb://se-gen\n          predicates:\n            - Path=/code/**\n          filters:\n            - StripPrefix=1\n        # å®šæ—¶ä»»åŠ¡\n        - id: se-job\n          uri: lb://se-job\n          predicates:\n            - Path=/schedule/**\n          filters:\n            - StripPrefix=1\n        # ç³»ç»Ÿæ¨¡å—\n        - id: se-system\n          uri: lb://se-system\n          predicates:\n            - Path=/system/**\n          filters:\n            - StripPrefix=1\n        # æ–‡ä»¶æœåŠ¡\n        - id: se-file\n          uri: lb://se-file\n          predicates:\n            - Path=/file/**\n          filters:\n            - StripPrefix=1\n\n# å®‰å…¨é…ç½®\nsecurity:\n  # éªŒè¯ç  math,char\n  captcha:\n    enabled: false\n    type: math\n  # é˜²æ­¢XSS攻击\n  xss:\n    enabled: true\n    excludeUrls:\n      - /system/notice\n  # ä¸æ ¡éªŒç™½åå•\n  ignore:\n    whites:\n      - /auth/logout\n      - /auth/login\n      - /auth/register\n      - /*/v2/api-docs\n      - /csrf\n','57cec5abd0e0a6b77d853750344a9dc0','2020-05-14 14:17:55','2022-09-29 02:48:32','nacos','0:0:0:0:0:0:0:1','','','网关模块','null','null','yaml','',''),
(2,'se-gateway-dev.yml','DEFAULT_GROUP','spring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n  cloud:\n    gateway:\n      discovery:\n        locator:\n          lowerCaseServiceId: true\n          enabled: true\n      routes:\n        # è®¤è¯ä¸­å¿ƒ\n        - id: se-auth\n          uri: lb://se-auth\n          predicates:\n            - Path=/auth/**\n          filters:\n            # éªŒè¯ç å¤„理\n            - CacheRequestFilter\n            - ValidateCodeFilter\n            - StripPrefix=1\n        # ä»£ç ç”Ÿæˆ\n        - id: se-gen\n          uri: lb://se-gen\n          predicates:\n            - Path=/code/**\n          filters:\n            - StripPrefix=1\n        # å®šæ—¶ä»»åŠ¡\n        - id: se-job\n          uri: lb://se-job\n          predicates:\n            - Path=/schedule/**\n          filters:\n            - StripPrefix=1\n        # ç³»ç»Ÿæ¨¡å—\n        - id: se-system\n          uri: lb://se-system\n          predicates:\n            - Path=/system/**\n          filters:\n            - StripPrefix=1\n        # æ–‡ä»¶æœåŠ¡\n        - id: se-file\n          uri: lb://se-file\n          predicates:\n            - Path=/file/**\n          filters:\n            - StripPrefix=1\n\n# å®‰å…¨é…ç½®\nsecurity:\n  # éªŒè¯ç  math,char\n  captcha:\n    enabled: false\n    type: math\n  # é˜²æ­¢XSS攻击\n  xss:\n    enabled: true\n    excludeUrls:\n      - /system/notice\n  # ä¸æ ¡éªŒç™½åå•\n  ignore:\n    whites:\n      - /*/health\n      - /auth/logout\n      - /auth/login\n      - /auth/register\n      - /*/v2/api-docs\n      - /csrf\n','57cec5abd0e0a6b77d853750344a9dc0','2020-05-14 14:17:55','2022-09-29 02:48:32','nacos','0:0:0:0:0:0:0:1','','','网关模块','null','null','yaml','',''),
(3,'se-auth-dev.yml','DEFAULT_GROUP','spring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n','8bd9dada9a94822feeab40de55efced6','2020-11-20 00:00:00','2022-09-29 02:48:42','nacos','0:0:0:0:0:0:0:1','','','认证中心','null','null','yaml','',''),
(4,'se-monitor-dev.yml','DEFAULT_GROUP','# spring\nspring:\n  security:\n    user:\n      name: se\n      password: 123456\n  boot:\n    admin:\n      ui:\n        title: æœåŠ¡çŠ¶æ€ç›‘æŽ§\n','6f122fd2bfb8d45f858e7d6529a9cd44','2020-11-20 00:00:00','2022-09-29 02:48:54','nacos','0:0:0:0:0:0:0:1','','','监控中心','null','null','yaml','',''),
(5,'se-system-dev.yml','DEFAULT_GROUP','# spring配置\nspring:\n  redis:\n    host: se-redis\n    port: 6379\n    password: Redis_s!E_6.2.6\n  datasource:\n    druid:\n      stat-view-servlet:\n        enabled: false\n        loginUsername: admin\n        loginPassword: 123456\n    dynamic:\n      druid:\n        initial-size: 5\n        min-idle: 5\n        maxActive: 20\n        maxWait: 60000\n        connectTimeout: 30000\n        socketTimeout: 60000\n        timeBetweenEvictionRunsMillis: 60000\n        minEvictableIdleTimeMillis: 300000\n        validationQuery: SELECT 1 FROM DUAL\n        testWhileIdle: true\n        testOnBorrow: false\n        testOnReturn: false\n        poolPreparedStatements: true\n        maxPoolPreparedStatementPerConnectionSize: 20\n        filters: stat,slf4j\n        connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n      datasource:\n          # ä¸»åº“数据源\n          master:\n            driver-class-name: com.mysql.cj.jdbc.Driver\n            url: jdbc:mysql://se-mysql:3306/se-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n            username: root\n            password: My_Sql_s!E_v5.7\n          # ä»Žåº“数据源\n          # slave:\n            # username: \n            # password: \n            # url: \n            # driver-class-name: \n\n# mybatis配置\nmybatis:\n    # æœç´¢æŒ‡å®šåŒ…别名\n    typeAliasesPackage: com.se.system\n    # é…ç½®mapper的扫描,找到所有的mapper.xml映射文件\n    mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n  title: ç³»ç»Ÿæ¨¡å—接口文档\n  license: Powered By se','00678c89684ec0b825cb9b71e032db64','2020-11-20 00:00:00','2023-12-04 07:51:28','nacos','0:0:0:0:0:0:0:1','','','系统模块','null','null','yaml','',''),
docker-compose/mysql/initdb/se_quartz.sql
@@ -1,6 +1,6 @@
-- DROP DATABASE IF EXISTS `se-cloud`;
CREATE DATABASE IF NOT EXISTS  `se-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE IF NOT EXISTS `se-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
docker-compose/mysql/initdb/se_seata_20210128.sql
@@ -1,6 +1,6 @@
DROP DATABASE IF EXISTS `se-seata`;
-- DROP DATABASE IF EXISTS `se-seata`;
CREATE DATABASE  `se-seata` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE IF NOT EXISTS `se-seata` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
docker-compose/nacos/conf/application.properties
@@ -155,7 +155,7 @@
nacos.core.auth.caching.enabled=true
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.enable.userAgentAuthWhite=true
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
@@ -167,7 +167,7 @@
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
#nacos.core.auth.ldap.url=ldap://localhost:389
docker-compose/nginx/conf/nginx.conf
@@ -19,8 +19,20 @@
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
        location /prod-api/{
        location /sso {
            alias    /usr/share/nginx/html/sso;
            try_files $uri $uri/ /sso/;
            #index  index.html index.htm;
        }
        location /sys {
            alias    /usr/share/nginx/html/sys;
            try_files $uri $uri/ /sys/;
            #index  index.html index.htm;
        }
        location /prod-api/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
@@ -29,7 +41,7 @@
            proxy_pass http://se-gateway:8080/;
        }
        # é¿å…actuator暴露
        # actuator
        if ($request_uri ~ "/actuator") {
            return 403;
        }
se-api/se-api-system/src/main/java/com/se/system/api/domain/SysUser.java
@@ -37,6 +37,10 @@
    @Excel(name = "用户名称")
    private String nickName;
    /** å¯†çº§ç±»åž‹ */
    @Excel(name = "密级类型")
    private String secretLevel;
    /** ç”¨æˆ·é‚®ç®± */
    @Excel(name = "用户邮箱")
    private String email;
@@ -129,6 +133,16 @@
        this.deptId = deptId;
    }
    @Xss(message = "密级类型不能包含脚本字符")
    @Size(min = 1, max = 2, message = "密级类型长度不能超过2个字符")
    public String getSecretLevel() {
        return secretLevel;
    }
    public void setSecretLevel(String secretLevel) {
        this.secretLevel = secretLevel;
    }
    @Xss(message = "用户昵称不能包含脚本字符")
    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
    public String getNickName()
se-auth/pom.xml
@@ -51,7 +51,14 @@
            <groupId>com.se</groupId>
            <artifactId>se-common-security</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
    
    <build>
se-auth/se-auth.iml
@@ -11,12 +11,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../se-auth/target/classes" />
    <output-test url="file://$MODULE_DIR$/../se-auth/target/test-classes" />
    <content url="file://$MODULE_DIR$/../se-auth">
      <sourceFolder url="file://$MODULE_DIR$/../se-auth/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../se-auth/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../se-auth/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
@@ -163,6 +163,7 @@
    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.10.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.34" level="project" />
    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.4" level="project" />
    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.30" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-bootstrap:3.1.7" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:3.1.7" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.11.RELEASE" level="project" />
se-auth/src/main/java/com/se/auth/controller/HealthController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.se.auth.controller;
import com.se.common.core.web.controller.BaseController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * å¥åº·æŽ§åˆ¶å™¨
 *
 * @author WWW
 * @date 2024-08-24
 */
@RestController
public class HealthController extends BaseController {
    @GetMapping("/health")
    public long test() {
        return System.currentTimeMillis();
    }
}
se-auth/src/main/java/com/se/auth/controller/TokenController.java
@@ -6,10 +6,7 @@
import com.se.auth.form.RegisterBody;
import com.se.auth.service.SysLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.se.common.core.domain.R;
import com.se.common.core.utils.JwtUtils;
import com.se.common.core.utils.StringUtils;
@@ -41,6 +38,23 @@
        return R.ok(tokenService.createToken(userInfo));
    }
    @GetMapping("validate")
    @PostMapping("validate")
    public R<Object> validate(HttpServletRequest request) {
        try {
            boolean flag = false;
            String token = SecurityUtils.getToken(request);
            if (!StringUtils.isNotEmpty(token)) {
                String userName = JwtUtils.getUserName(token);
                flag = !StringUtils.isEmpty(userName);
            }
            return R.ok(flag);
        } catch (Exception ex) {
            return R.fail(ex.getMessage());
        }
    }
    @DeleteMapping("logout")
    public R<?> logout(HttpServletRequest request)
    {
se-auth/src/main/java/com/se/auth/service/AsyncService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.se.auth.service;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * å¼‚步服务
 *
 * @author WWW
 * @date 2024-08-25
 */
@Slf4j
@Service
@SuppressWarnings("ALL")
public class AsyncService {
    public void asyncCall() {
        try {
            ExecutorService executor = Executors.newSingleThreadExecutor();
            executor.execute(new Runnable() {
                @Override
                @SneakyThrows
                public void run() {
                    //
                }
            });
            executor.shutdown();
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
    }
}
se-auth/src/main/java/com/se/auth/service/SysPasswordService.java
@@ -16,6 +16,7 @@
 * @author admin
 */
@Component
@SuppressWarnings("ALL")
public class SysPasswordService
{
    @Autowired
@@ -50,12 +51,12 @@
            retryCount = 0;
        }
        if (retryCount >= Integer.valueOf(maxRetryCount).intValue())
        /*if (retryCount >= Integer.valueOf(maxRetryCount).intValue())
        {
            String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime);
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL,errMsg);
            throw new ServiceException(errMsg);
        }
        }*/
        if (!matches(user, password))
        {
se-auth/src/main/resources/bootstrap.yml
@@ -14,9 +14,11 @@
    nacos:
      discovery:
        # æœåŠ¡æ³¨å†Œåœ°å€
        #server-addr: 192.168.11.203:8848
        server-addr: 127.0.0.1:8848
      config:
        # é…ç½®ä¸­å¿ƒåœ°å€
        #server-addr: 192.168.11.203:8848
        server-addr: 127.0.0.1:8848
        # é…ç½®æ–‡ä»¶æ ¼å¼
        file-extension: yml
se-cloud.iml
se-common/se-common-core/src/main/java/com/se/common/core/constant/TokenConstants.java
@@ -5,8 +5,22 @@
 * 
 * @author admin
 */
public class TokenConstants
{
public class TokenConstants {
    /**
     * ä»¤ç‰Œæ ‡è¯†-URL
     */
    public static final String TOKEN = "token";
    /**
     * ä»¤ç‰Œæ ‡è¯†-URL
     */
    public static final String ACCESS_TOKEN = "accessToken";
    /**
     * ä»¤ç‰Œæ ‡è¯†-Cookie
     */
    public static final String COOKIE_TOKEN = "Admin-Token";
    /**
     * ä»¤ç‰Œè‡ªå®šä¹‰æ ‡è¯†
     */
@@ -21,5 +35,4 @@
     * ä»¤ç‰Œç§˜é’¥
     */
    public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
}
se-common/se-common-core/src/main/java/com/se/common/core/utils/AesUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
package com.se.common.core.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
/**
 * AES加密工具
 *
 * @author WWW
 * @date 2024-08-25
 */
@SuppressWarnings("ALL")
public class AesUtils {
    /**
     * å¯†é’¥é•¿åº¦å¿…须是16
     */
    private static final String DEFAULT_KEY = "A#s_zZ_sErve_k.y";
    private static final String KEY_ALGORITHM = "AES";
    /**
     * ç®—法
     */
    private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";
    /**
     * aes解密
     *
     * @param encrypt å†…容
     * @return
     * @throws Exception
     */
    public static String decrypt(String encrypt) throws Exception {
        return decrypt(encrypt, DEFAULT_KEY);
    }
    /**
     * aes加密
     *
     * @param content å†…容
     * @return
     * @throws Exception
     */
    public static String encrypt(String content) throws Exception {
        return encrypt(content, DEFAULT_KEY);
    }
    /**
     * base 64 encode
     *
     * @param bytes å¾…编码的byte[]
     * @return ç¼–码后的base64 code
     */
    private static String base64Encode(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }
    /**
     * base 64 decode
     *
     * @param base64Code å¾…解码的base64 code
     * @return è§£ç åŽçš„byte[]
     * @throws Exception
     */
    private static byte[] base64Decode(String base64Code) {
        return StringUtils.isEmpty(base64Code) ? null : Base64.getDecoder().decode(base64Code);
    }
    /**
     * AES加密
     *
     * @param content    å¾…加密的内容
     * @param encryptKey åР坆坆钥
     * @return åŠ å¯†åŽçš„byte[]
     * @throws Exception
     */
    private static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {
        // KeyGenerator kGen = KeyGenerator.getInstance(KEY_ALGORITHM)
        // kGen.init(128)
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), KEY_ALGORITHM));
        return cipher.doFinal(content.getBytes("utf-8"));
    }
    /**
     * AES加密为base 64 code
     *
     * @param content    å¾…加密的内容
     * @param encryptKey åР坆坆钥
     * @return åŠ å¯†åŽçš„base 64 code
     * @throws Exception
     */
    public static String encrypt(String content, String encryptKey) throws Exception {
        return base64Encode(aesEncryptToBytes(content, encryptKey));
    }
    /**
     * å°†base 64 code AES解密
     *
     * @param encryptStr å¾…解密的base 64 code
     * @param decryptKey è§£å¯†å¯†é’¥
     * @return è§£å¯†åŽçš„string
     * @throws Exception
     */
    public static String decrypt(String encryptStr, String decryptKey) throws Exception {
        return StringUtils.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey);
    }
    /**
     * AES解密
     *
     * @param encryptBytes å¾…解密的byte[]
     * @param decryptKey   è§£å¯†å¯†é’¥
     * @return è§£å¯†åŽçš„String
     * @throws Exception
     */
    private static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {
        // KeyGenerator kGen = KeyGenerator.getInstance(KEY_ALGORITHM)
        // kGen.init(128)
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), KEY_ALGORITHM));
        byte[] decryptBytes = cipher.doFinal(encryptBytes);
        return new String(decryptBytes);
    }
}
se-common/se-common-core/src/main/java/com/se/common/core/utils/RsaUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,212 @@
package com.se.common.core.utils;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import javax.crypto.Cipher;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
/**
 * RSA工具类
 *
 * @author WWW
 * @date 2024-08-25
 */
public class RsaUtils {
    /**
     * ç§é’¥
     */
    private static String privateKey;
    /**
     * å…¬é’¥
     */
    private static String publicKey;
    /**
     * å¯†é’¥ç®—法
     */
    private static final String KEY_ALGORITHM = "RSA";
    /**
     * RSA密钥长度:1024 æˆ– 2048
     */
    private static final int DEFAULT_RSA_KEY_SIZE = 1024;
    /**
     * æ—¥å¿—
     */
    private static final Logger log = LoggerFactory.getLogger(RsaUtils.class);
    /**
     * ç”Ÿæˆå…¬ç§é’¥
     */
    public static void generate() {
        Map<String, String> result = generateRsaKey(DEFAULT_RSA_KEY_SIZE);
        System.out.println("公钥为:" + result.get("publicKey"));
        System.out.println("私钥为:" + result.get("privateKey"));
    }
    /**
     * èŽ·å–RSA加密私钥
     *
     * @return
     * @throws IOException
     */
    public static String getPrivateKey() throws IOException {
        if (privateKey == null) {
            InputStream inPrivate = new ClassPathResource("config" + File.separator + "rsa_private_key.txt").getInputStream();
            privateKey = inputStream2String(inPrivate);
            inPrivate.close();
        }
        return privateKey;
    }
    /**
     * èŽ·å–RSA加密公钥
     *
     * @return
     * @throws IOException
     */
    public static String getPublicKey() throws IOException {
        if (publicKey == null) {
            InputStream inPrivate = new ClassPathResource("config" + File.separator + "rsa_public_key.txt").getInputStream();
            publicKey = inputStream2String(inPrivate);
            inPrivate.close();
        }
        return publicKey;
    }
    /**
     * è¯»å–文本文件
     *
     * @param fileName æ–‡ä»¶è·¯å¾„
     * @return
     * @throws IOException
     */
    public static String readFile(String fileName) throws IOException {
        File file = new File(fileName);
        BufferedReader br = new BufferedReader(new FileReader(file));
        StringBuilder result = new StringBuilder();
        String line = null;
        while ((line = br.readLine()) != null) {
            result.append(System.lineSeparator() + line);
        }
        br.close();
        return result.toString();
    }
    /**
     * æŠŠinputStream转成String
     *
     * @param is
     * @return
     * @throws IOException
     */
    private static String inputStream2String(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i = -1;
        while ((i = is.read()) != -1) {
            baos.write(i);
        }
        String str = baos.toString();
        baos.close();
        return str;
    }
    /**
     * ç”ŸæˆRSA的公私钥
     *
     * @param keySize 1025 æˆ– 2048
     * @return
     */
    public static Map<String, String> generateRsaKey(int keySize) {
        Map<String, String> result = new HashMap<>(2);
        try {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
            // åˆå§‹åŒ–密钥对生成器,密钥大小为1024 2048位
            keyPairGen.initialize(keySize, new SecureRandom());
            // ç”Ÿæˆä¸€ä¸ªå¯†é’¥å¯¹ï¼Œä¿å­˜åœ¨keyPair中
            KeyPair keyPair = keyPairGen.generateKeyPair();
            // å¾—到公钥字符串
            String pub = new String(Base64.encodeBase64(keyPair.getPublic().getEncoded()));
            result.put("publicKey", pub);
            // å¾—到私钥字符串
            String pri = new String(Base64.encodeBase64(keyPair.getPrivate().getEncoded()));
            result.put("privateKey", pri);
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
        return result;
    }
    /**
     * RSA私钥解密
     *
     * @param str åŠ å¯†çš„å­—ç¬¦ä¸²
     * @return è§£å¯†å­—符串
     * @throws Exception åŠ å¯†è¿‡ç¨‹ä¸­çš„å¼‚å¸¸ä¿¡æ¯
     */
    public static String decrypt(String str) throws Exception {
        // 64位解码加密后的字符串
        byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8));
        // Base64编码的私钥
        byte[] decoded = Base64.decodeBase64(getPrivateKey());
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
        // RSA解密:RSA/ECB/NoPadding
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        String outStr = new String(cipher.doFinal(inputByte));
        return outStr;
    }
    /**
     * RSA公钥加密
     *
     * @param str éœ€è¦åŠ å¯†çš„å­—ç¬¦ä¸²
     * @return å¯†æ–‡
     * @throws Exception åŠ å¯†è¿‡ç¨‹ä¸­çš„å¼‚å¸¸ä¿¡æ¯
     */
    public static String encrypt(String str) throws Exception {
        // Base64编码的公钥
        byte[] decoded = Base64.decodeBase64(getPublicKey());
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
        // RSA加密:RSA/ECB/NoPadding
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8)));
        return outStr;
    }
}
se-common/se-common-core/src/main/java/com/se/common/core/utils/StringUtils.java
@@ -8,6 +8,9 @@
import com.se.common.core.text.StrFormatter;
import org.springframework.util.AntPathMatcher;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
/**
 * å­—符串工具类
 * 
@@ -605,4 +608,19 @@
        }
        return sb.toString();
    }
    public static String getValueFromCookie(HttpServletRequest request,String key) {
        Cookie[] cookies = request.getCookies();
        if (cookies == null || cookies.length == 0) {
            return null;
        }
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals(key)){
                return cookie.getValue();
            }
        }
        return null;
    }
}
se-common/se-common-security/src/main/java/com/se/common/security/utils/SecurityUtils.java
@@ -59,10 +59,23 @@
    /**
     * æ ¹æ®request获取请求token
     */
    public static String getToken(HttpServletRequest request)
    {
    public static String getToken(HttpServletRequest request) {
        // ä»Žheader获取token标识
        String token = request.getHeader(TokenConstants.AUTHENTICATION);
        // ä»Žurl获取token标识
        if (StringUtils.isEmpty(token)) {
            token = request.getParameter(TokenConstants.ACCESS_TOKEN);
        }
        if (StringUtils.isEmpty(token)) {
            token = request.getParameter(TokenConstants.TOKEN);
        }
        // ä»Žcookie获取token标识
        if (StringUtils.isEmpty(token)) {
            token = StringUtils.getValueFromCookie(request, TokenConstants.COOKIE_TOKEN);
        }
        return replaceTokenPrefix(token);
    }
se-gateway/src/main/java/com/se/gateway/config/CorsConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.se.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.cors.reactive.CorsUtils;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
/**
 * è·¨åŸŸé…ç½®
 *
 * @author se
 * @date 2024-08-28
 */
@Configuration
public class CorsConfig
{
    /**
     * è¿™é‡Œä¸ºæ”¯æŒçš„请求头,如果有自定义的header字段请自己添加
     */
    // private static final String ALLOWED_HEADERS = "X-Requested-With, Content-Type, Authorization, credential, X-XSRF-TOKEN, token, Admin-Token, App-Token"
    private static final String ALLOWED_HEADERS = "*";
    private static final String ALLOWED_METHODS = "GET,POST,PUT,DELETE,OPTIONS,HEAD";
    private static final String ALLOWED_ORIGIN = "*";
    private static final String ALLOWED_EXPOSE = "*";
    private static final String MAX_AGE = "18000L";
    @Bean
    public WebFilter corsFilter()
    {
        return (ServerWebExchange ctx, WebFilterChain chain) -> {
            ServerHttpRequest request = ctx.getRequest();
            if (CorsUtils.isCorsRequest(request))
            {
                ServerHttpResponse response = ctx.getResponse();
                HttpHeaders headers = response.getHeaders();
                headers.add("Access-Control-Allow-Headers", ALLOWED_HEADERS);
                headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS);
                headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN);
                headers.add("Access-Control-Expose-Headers", ALLOWED_EXPOSE);
                headers.add("Access-Control-Max-Age", MAX_AGE);
                headers.add("Access-Control-Allow-Credentials", "true");
                if (request.getMethod() == HttpMethod.OPTIONS)
                {
                    response.setStatusCode(HttpStatus.OK);
                    return Mono.empty();
                }
            }
            return chain.filter(ctx);
        };
    }
}
se-gateway/src/main/java/com/se/gateway/handler/HealthController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.se.gateway.handler;
import com.se.common.core.web.controller.BaseController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * å¥åº·æŽ§åˆ¶å™¨
 *
 * @author WWW
 * @date 2024-08-24
 */
@RestController
@RequestMapping("/gateway")
public class HealthController extends BaseController {
    @GetMapping("/health")
    public long test() {
        return System.currentTimeMillis();
    }
}
se-gateway/src/main/java/com/se/gateway/handler/SwaggerHandler.java
@@ -32,6 +32,11 @@
        this.swaggerResources = swaggerResources;
    }
    @GetMapping("/health")
    public long health() {
        return System.currentTimeMillis();
    }
    @GetMapping("/configuration/security")
    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration()
    {
se-gateway/src/main/resources/bootstrap.yml
@@ -14,9 +14,11 @@
    nacos:
      discovery:
        # æœåŠ¡æ³¨å†Œåœ°å€
        #server-addr: 192.168.11.203:8848
        server-addr: 127.0.0.1:8848
      config:
        # é…ç½®ä¸­å¿ƒåœ°å€
        #server-addr: 192.168.11.203:8848
        server-addr: 127.0.0.1:8848
        # é…ç½®æ–‡ä»¶æ ¼å¼
        file-extension: yml
@@ -33,6 +35,7 @@
      datasource:
        ds1:
          nacos:
            #server-addr: 192.168.11.203:8848
            server-addr: 127.0.0.1:8848
            dataId: sentinel-se-gateway
            groupId: DEFAULT_GROUP
se-modules/se-system/src/main/java/com/se/system/controller/HealthController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.se.system.controller;
import com.se.common.core.web.controller.BaseController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * å¥åº·æŽ§åˆ¶å™¨
 *
 * @author WWW
 * @date 2024-08-24
 */
@RestController
public class HealthController extends BaseController {
    @GetMapping("/health")
    public long test() {
        return System.currentTimeMillis();
    }
}
se-modules/se-system/src/main/java/com/se/system/controller/SysUserController.java
@@ -165,16 +165,18 @@
     * @return ç”¨æˆ·ä¿¡æ¯
     */
    @GetMapping("getInfo")
    public AjaxResult getInfo()
    {
    public AjaxResult getInfo() {
        SysUser user = userService.selectUserById(SecurityUtils.getUserId());
        // è§’色集合
        Set<String> roles = permissionService.getRolePermission(user);
        // æƒé™é›†åˆ
        Set<String> permissions = permissionService.getMenuPermission(user);
        // å²—位集合
        List<String> posts = permissionService.getPostPermission(user);
        AjaxResult ajax = AjaxResult.success();
        ajax.put("user", user);
        ajax.put("roles", roles);
        ajax.put("posts", posts);
        ajax.put("permissions", permissions);
        return ajax;
    }
se-modules/se-system/src/main/java/com/se/system/service/ISysPermissionService.java
@@ -1,5 +1,6 @@
package com.se.system.service;
import java.util.List;
import java.util.Set;
import com.se.system.api.domain.SysUser;
@@ -9,11 +10,10 @@
 * 
 * @author admin
 */
public interface ISysPermissionService
{
public interface ISysPermissionService {
    /**
     * èŽ·å–è§’è‰²æ•°æ®æƒé™
     *
     *
     * @param userId ç”¨æˆ·Id
     * @return è§’色权限信息
     */
@@ -21,9 +21,17 @@
    /**
     * èŽ·å–èœå•æ•°æ®æƒé™
     *
     *
     * @param userId ç”¨æˆ·Id
     * @return èœå•权限信息
     */
    public Set<String> getMenuPermission(SysUser user);
    /**
     * èŽ·å–èœå•æ•°æ®æƒé™
     *
     * @param userId ç”¨æˆ·Id
     * @return èœå•权限信息
     */
    public List<String> getPostPermission(SysUser user);
}
se-modules/se-system/src/main/java/com/se/system/service/impl/SysPermissionServiceImpl.java
@@ -1,8 +1,14 @@
package com.se.system.service.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import com.se.common.core.utils.StringUtils;
import com.se.system.domain.SysPost;
import com.se.system.mapper.SysPostMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -12,37 +18,37 @@
import com.se.system.service.ISysPermissionService;
import com.se.system.service.ISysRoleService;
import javax.annotation.Resource;
/**
 * ç”¨æˆ·æƒé™å¤„理
 * 
 * @author admin
 */
@Service
public class SysPermissionServiceImpl implements ISysPermissionService
{
public class SysPermissionServiceImpl implements ISysPermissionService {
    @Autowired
    private ISysRoleService roleService;
    @Autowired
    private ISysMenuService menuService;
    @Resource
    private SysPostMapper postMapper;
    /**
     * èŽ·å–è§’è‰²æ•°æ®æƒé™
     *
     *
     * @param userId ç”¨æˆ·Id
     * @return è§’色权限信息
     */
    @Override
    public Set<String> getRolePermission(SysUser user)
    {
    public Set<String> getRolePermission(SysUser user) {
        Set<String> roles = new HashSet<String>();
        // ç®¡ç†å‘˜æ‹¥æœ‰æ‰€æœ‰æƒé™
        if (user.isAdmin())
        {
        if (user.isAdmin()) {
            roles.add("admin");
        }
        else
        {
        } else {
            roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
        }
        return roles;
@@ -50,37 +56,39 @@
    /**
     * èŽ·å–èœå•æ•°æ®æƒé™
     *
     *
     * @param userId ç”¨æˆ·Id
     * @return èœå•权限信息
     */
    @Override
    public Set<String> getMenuPermission(SysUser user)
    {
    public Set<String> getMenuPermission(SysUser user) {
        Set<String> perms = new HashSet<String>();
        // ç®¡ç†å‘˜æ‹¥æœ‰æ‰€æœ‰æƒé™
        if (user.isAdmin())
        {
        if (user.isAdmin()) {
            perms.add("*:*:*");
        }
        else
        {
        } else {
            List<SysRole> roles = user.getRoles();
            if (!CollectionUtils.isEmpty(roles))
            {
            if (!CollectionUtils.isEmpty(roles)) {
                // å¤šè§’色设置permissions属性,以便数据权限匹配权限
                for (SysRole role : roles)
                {
                for (SysRole role : roles) {
                    Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
                    role.setPermissions(rolePerms);
                    perms.addAll(rolePerms);
                }
            }
            else
            {
            } else {
                perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
            }
        }
        return perms;
    }
    @Override
    public List<String> getPostPermission(SysUser user) {
        List<SysPost> list = postMapper.selectPostsByUserName(user.getUserName());
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        return list.stream().map(SysPost::getPostName).collect(Collectors.toList());
    }
}
se-modules/se-system/src/main/resources/bootstrap.yml
@@ -14,9 +14,11 @@
    nacos:
      discovery:
        # æœåŠ¡æ³¨å†Œåœ°å€
        #server-addr: 192.168.11.203:8848
        server-addr: 127.0.0.1:8848
      config:
        # é…ç½®ä¸­å¿ƒåœ°å€
        #server-addr: 192.168.11.203:8848
        server-addr: 127.0.0.1:8848
        # é…ç½®æ–‡ä»¶æ ¼å¼
        file-extension: yml
se-modules/se-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -9,6 +9,7 @@
        <result property="deptId"       column="dept_id"      />
        <result property="userName"     column="user_name"    />
        <result property="nickName"     column="nick_name"    />
        <result property="secretLevel"  column="secret_level" />
        <result property="email"        column="email"        />
        <result property="phonenumber"  column="phonenumber"  />
        <result property="sex"          column="sex"          />
@@ -47,7 +48,7 @@
    </resultMap>
    
    <sql id="selectUserVo">
        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.secret_level, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
        from sys_user u
@@ -57,7 +58,7 @@
    </sql>
    
    <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.secret_level, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
        left join sys_dept d on u.dept_id = d.dept_id
        where u.del_flag = '0'
        <if test="userId != null and userId != 0">
@@ -86,7 +87,7 @@
    </select>
    
    <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.secret_level, u.email, u.phonenumber, u.status, u.create_time
        from sys_user u
             left join sys_dept d on u.dept_id = d.dept_id
             left join sys_user_role ur on u.user_id = ur.user_id
@@ -103,7 +104,7 @@
    </select>
    
    <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.secret_level, u.email, u.phonenumber, u.status, u.create_time
        from sys_user u
             left join sys_dept d on u.dept_id = d.dept_id
             left join sys_user_role ur on u.user_id = ur.user_id
@@ -148,6 +149,7 @@
             <if test="deptId != null and deptId != 0">dept_id,</if>
             <if test="userName != null and userName != ''">user_name,</if>
             <if test="nickName != null and nickName != ''">nick_name,</if>
            <if test="secretLevel != null and secretLevel != ''">secret_level,</if>
             <if test="email != null and email != ''">email,</if>
             <if test="avatar != null and avatar != ''">avatar,</if>
             <if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
@@ -162,6 +164,7 @@
             <if test="deptId != null and deptId != ''">#{deptId},</if>
             <if test="userName != null and userName != ''">#{userName},</if>
             <if test="nickName != null and nickName != ''">#{nickName},</if>
            <if test="secretLevel != null and secretLevel != ''">#{secretLevel},</if>
             <if test="email != null and email != ''">#{email},</if>
             <if test="avatar != null and avatar != ''">#{avatar},</if>
             <if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
@@ -180,6 +183,7 @@
             <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
             <if test="userName != null and userName != ''">user_name = #{userName},</if>
             <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
            <if test="secretLevel != null and secretLevel != ''">secret_level = #{secretLevel},</if>
             <if test="email != null ">email = #{email},</if>
             <if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
             <if test="sex != null and sex != ''">sex = #{sex},</if>
sql/jg.png
Binary files differ
sql/se_cloud_20240629.sql
ÎļþÒÑɾ³ý
sql/se_config_20231204.sql
ÎļþÒÑɾ³ý
sql/se_quartz.sql
ÎļþÒÑɾ³ý
sql/se_seata_20210128.sql
ÎļþÒÑɾ³ý