浏览代码

新增登录时间配置

tsurumure 7 月之前
父节点
当前提交
2228d2bd40

+ 6 - 4
db/sys_common.sql

@@ -7,7 +7,7 @@ Date: 2023/05/23 17:09:22
 DROP TABLE IF EXISTS `sys_common`;
 CREATE TABLE `sys_common` (
     PRIMARY KEY (`id`),
-    `id` BIGINT NOT NULL COMMENT 'ID',
+    `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
     `name` VARCHAR(100) NOT NULL COMMENT '配置名称',
     `description` VARCHAR(500) COMMENT '配置描述',
     `tag` VARCHAR(100) COMMENT '配置键',
@@ -19,7 +19,9 @@ CREATE TABLE `sys_common` (
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
 
-INSERT INTO sys_common(id, name, description, tag, value, value_type, value_option, category, sort) VALUES
-    (1, '单文件上传大小限制(MB)', null, 'UPLOAD_MAX_SIZE_MB', 100, 'Number', null, 'UPLOAD', 2),
-    (2, '是否启用文件MD5查重', '已存在的文件不再上传', 'UPLOAD_MD5_DUPLICATE', 1, 'Radio', null, 'UPLOAD', 1)
+INSERT INTO sys_common(name, description, tag, value, value_type, value_option, category, sort) VALUES
+    ('单文件上传大小限制(MB)', null, 'UPLOAD_MAX_SIZE_MB', 100, 'Number', null, 'UPLOAD', 2),
+    ('是否启用文件MD5查重', '已存在的文件不再上传', 'UPLOAD_MD5_DUPLICATE', 1, 'Radio', null, 'UPLOAD', 1),
+
+    ('系统用户默认登录过期时间(小时)', null, 'SYSTEM_LOGIN_DURATION_DEFAULT', 24, 'Number', null, 'SYSTEM', 1)
 ;

+ 1 - 1
src/main/java/com/backendsys/modules/system/entity/SysCommon.java

@@ -17,7 +17,7 @@ public class SysCommon {
     public static interface Detail{}
     public static interface Update{}
 
-    @TableId(type = IdType.NONE)
+    @TableId(type = IdType.AUTO)
     @NotNull(message = "id 不能为空", groups = { Detail.class, Update.class })
     private Long id;
 

+ 22 - 8
src/main/java/com/backendsys/modules/system/service/impl/SysAuthServiceImpl.java

@@ -1,6 +1,9 @@
 package com.backendsys.modules.system.service.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.json.JSONUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.redis.utils.RedisUtil;
@@ -11,6 +14,7 @@ import com.backendsys.modules.system.dao.SysUserDao;
 import com.backendsys.modules.system.dao.SysUserInfoDao;
 import com.backendsys.modules.system.entity.*;
 import com.backendsys.modules.system.service.SysAuthService;
+import com.backendsys.modules.system.service.SysCommonService;
 import com.backendsys.modules.system.service.SysUserIntegralService;
 import com.backendsys.modules.system.service.SysUserService;
 import com.backendsys.utils.response.ResultEnum;
@@ -59,14 +63,13 @@ public class SysAuthServiceImpl implements SysAuthService {
     private SysMobileAreaDao sysMobileAreaDao;
     @Autowired
     private SysUserIntegralService sysUserIntegralService;
+    @Autowired
+    private SysCommonService sysCommonService;
 
     @Value("${tencent.sms.debug}")
     private String SMS_DEBUG;
     @Value("${CAPTCHA_DURATION}")
     private Integer CAPTCHA_DURATION;
-    @Value("${TOKEN_DURATION_SYSTEM}")
-    private Integer TOKEN_DURATION_SYSTEM;
-
 
     @Value("${REDIS_LOGIN_TOKEN_PREFIX}")
     private String REDIS_LOGIN_TOKEN_PREFIX;
@@ -156,9 +159,20 @@ public class SysAuthServiceImpl implements SysAuthService {
         sysUserInfo.setLast_login_time(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
         sysUserInfoDao.updateById(sysUserInfo);
 
-        // 设置 Token 过期时间
-        Integer token_duration = (is_remember != null && is_remember.equals(1)) ? TOKEN_DURATION_SYSTEM * 7 : TOKEN_DURATION_SYSTEM;
-        Date token_expiration = new Date((new Date()).getTime() + token_duration);
+        // [系统配置] 系统用户默认登录过期时间(小时)
+        Integer SYSTEM_LOGIN_DURATION_DEFAULT = Convert.toInt(sysCommonService.getCommonByTag("SYSTEM_LOGIN_DURATION_DEFAULT"));
+        // 将小时转换为毫秒
+        Long DEFAULT_MILLISECONDS = SYSTEM_LOGIN_DURATION_DEFAULT * DateUnit.HOUR.getMillis();
+        // 7天 (转毫秒)
+        Long SEVEN_DAY_MILLISECONDS = 7L * 24 * 60 * 60 * 1000;
+
+        Long token_duration_milliseconds = (is_remember != null && is_remember.equals(1)) ? SEVEN_DAY_MILLISECONDS : DEFAULT_MILLISECONDS;
+        Integer token_duration_hours = Convert.toInt(token_duration_milliseconds / 3600000L);
+
+        System.out.println("token_duration_milliseconds = " + token_duration_milliseconds);
+        System.out.println("token_duration_hours = " + token_duration_hours);
+
+        Date token_expiration = new Date((new Date()).getTime() + token_duration_milliseconds);
         sysUserInfo.setToken_expiration(DateUtil.format(token_expiration, "yyyy-MM-dd HH:mm:ss"));
 
         // 生成 Token
@@ -169,13 +183,13 @@ public class SysAuthServiceImpl implements SysAuthService {
         sysUserInfo.setToken(token);
 
         // [Redis] 将 Token 存入缓存
-        redisUtil.setCacheObject(token_redis_key, token, token_duration, TimeUnit.MILLISECONDS);
+        redisUtil.setCacheObject(token_redis_key, token, token_duration_hours, TimeUnit.HOURS);
 
         // [Redis] 将 Permission 存入缓存
         List<String> permission_ids_list = sysUserInfo.getPermission_ids();
         String permission_ids = String.join(",", permission_ids_list);
         String permission_redis_key = REDIS_LOGIN_PERMISSION_PREFIX + uuid;
-        redisUtil.setCacheObject(permission_redis_key, permission_ids, token_duration, TimeUnit.MILLISECONDS);
+        redisUtil.setCacheObject(permission_redis_key, permission_ids, token_duration_hours, TimeUnit.HOURS);
 
         return sysUserInfo;
     }

+ 1 - 1
src/main/resources/application.yml

@@ -147,7 +147,7 @@ DEFAULT_LANGUAGE: zh
 CAPTCHA_DURATION: 60000
 
 # [安全] 系统用户登录 Token 过期时间 (86400000毫秒 = 1天 = 24小时) (如果 login.is_remember 则为7天)
-TOKEN_DURATION_SYSTEM: 86400000
+#TOKEN_DURATION_SYSTEM: 86400000
 # [安全] 会员用户登录 Token 过期时间 (604800000毫秒 = 7天)
 TOKEN_DURATION_MEMBER: 604800000