Selaa lähdekoodia

修改:<优化配置>

张旭锋 3 päivää sitten
vanhempi
commit
9302f5d852

+ 3 - 2
src/main/java/com/jtzx/crm/helper/CaptchaHelper.java

@@ -1,6 +1,7 @@
 package com.jtzx.crm.helper;
 
 import cc.uncarbon.framework.core.exception.BusinessException;
+import com.jtzx.crm.module.api.constant.RedisConstant;
 import com.jtzx.crm.module.api.enums.AdminApiErrorEnum;
 import com.jtzx.crm.module.api.model.interior.AdminCaptchaContainer;
 import cn.hutool.captcha.CaptchaUtil;
@@ -58,8 +59,8 @@ public class CaptchaHelper {
         ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(196, 50, CAPTCHA_ANSWER_LENGTH, 4);
 
         // 将验证码答案保存至 redis, 有效期5分钟
-        stringRedisTemplate.opsForValue().set(captchaCacheKey, captcha.getCode(), 300, TimeUnit.SECONDS);
-        LocalDateTime expiredAt = LocalDateTimeUtil.offset(LocalDateTimeUtil.now(), 300, ChronoUnit.SECONDS);
+        stringRedisTemplate.opsForValue().set(captchaCacheKey, captcha.getCode(), RedisConstant.CAPTCH_CODE_DURATION, TimeUnit.SECONDS);
+        LocalDateTime expiredAt = LocalDateTimeUtil.offset(LocalDateTimeUtil.now(), RedisConstant.CAPTCH_CODE_DURATION, ChronoUnit.SECONDS);
 
         return new AdminCaptchaContainer(captcha, uuid.toString(true), expiredAt);
     }

+ 3 - 12
src/main/java/com/jtzx/crm/interceptor/AdminSaTokenParseInterceptor.java

@@ -1,19 +1,17 @@
 package com.jtzx.crm.interceptor;
 
-import cc.uncarbon.framework.core.context.TenantContextHolder;
 import cc.uncarbon.framework.core.context.UserContext;
 import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.web.util.IPUtil;
-import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
 import cn.dev33.satoken.session.SaSession;
+import com.jtzx.crm.module.api.util.CrmAdminStpUtil;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.servlet.AsyncHandlerInterceptor;
 import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
 
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
 
 /**
  * 从请求头解析并赋值到用户上下文,用于后台管理用户的鉴权
@@ -39,9 +37,7 @@ public class AdminSaTokenParseInterceptor implements AsyncHandlerInterceptor {
             }
         } else {
             UserContextHolder.clear();
-            TenantContextHolder.clear();
         }
-
         return true;
     }
 
@@ -54,15 +50,10 @@ public class AdminSaTokenParseInterceptor implements AsyncHandlerInterceptor {
     public static void setContextsFromSaSession(SaSession session, HttpServletRequest request) {
         // 赋值用户上下文
         UserContext userContext = (UserContext) session.get(UserContext.CAMEL_NAME);
-
         // 获取用户公网IP
         // 先按逗号分隔后,再取第index个IP地址(从0开始);兼容启用了云防护盾CDN的服务器(可能获取到的IP会带上中间代理节点的IP地址)
         userContext.setClientIP(IPUtil.getClientIPAddress(request, 0));
         UserContextHolder.setUserContext(userContext);
-
-        // 赋值租户上下文
-//        TenantContext tenantContext = (TenantContext) session.get(TenantContext.CAMEL_NAME);
-//        TenantContextHolder.setTenantContext(tenantContext);
     }
 
 }

+ 2 - 12
src/main/java/com/jtzx/crm/interceptor/DefaultSaTokenParseInterceptor.java

@@ -1,20 +1,17 @@
 package com.jtzx.crm.interceptor;
 
-import cc.uncarbon.framework.core.context.TenantContext;
-import cc.uncarbon.framework.core.context.TenantContextHolder;
 import cc.uncarbon.framework.core.context.UserContext;
 import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.web.util.IPUtil;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.servlet.AsyncHandlerInterceptor;
 import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
 
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
 /**
  * 从请求头解析并赋值到用户上下文,默认用于C端用户的鉴权
  * @author Uncarbon
@@ -37,9 +34,7 @@ public class DefaultSaTokenParseInterceptor implements AsyncHandlerInterceptor {
             }
         } else {
             UserContextHolder.clear();
-            TenantContextHolder.clear();
         }
-
         return true;
     }
 
@@ -52,14 +47,9 @@ public class DefaultSaTokenParseInterceptor implements AsyncHandlerInterceptor {
     public static void setContextsFromSaSession(SaSession session, HttpServletRequest request) {
         // 赋值用户上下文
         UserContext userContext = (UserContext) session.get(UserContext.CAMEL_NAME);
-
         // 获取用户公网IP
         // 先按逗号分隔后,再取第index个IP地址(从0开始);兼容启用了云防护盾CDN的服务器(可能获取到的IP会带上中间代理节点的IP地址)
         userContext.setClientIP(IPUtil.getClientIPAddress(request, 0));
         UserContextHolder.setUserContext(userContext);
-
-        // 赋值租户上下文
-//        TenantContext tenantContext = (TenantContext) session.get(TenantContext.CAMEL_NAME);
-//        TenantContextHolder.setTenantContext(tenantContext);
     }
 }

+ 10 - 0
src/main/java/com/jtzx/crm/module/api/constant/CommitConstant.java

@@ -0,0 +1,10 @@
+package com.jtzx.crm.module.api.constant;
+
+public class CommitConstant {
+
+
+    /**
+     * 6位短信验证码
+     */
+    public static final String SMS_CODE = "^\\d{6}$";
+}

+ 4 - 1
src/main/java/com/jtzx/crm/module/api/constant/RedisConstant.java

@@ -31,10 +31,13 @@ public final class RedisConstant {
 
     //账号登陆封禁后的结束时间
     public static final String ACCOUNT_LOGIN_FAILED_END_DATETIME_PREFIX = "accountLoginFailedEndDatetime:";
-
     //发登陆短信封禁后结束时间
     public static final String SMS_CODE_FAILED_END_DATETIME_PREFIX = "smsCodeFailedEndDatetime:";
     //短信验证码封禁后结束时间
     public static final String SMS_CODE_LOGIN_FAILED_END_DATETIME_PREFIX = "smsCodeLoginFailedEndDatetime:";
 
+
+    //图形验证码redis中的有效期时长:秒
+    public static final Integer CAPTCH_CODE_DURATION=300;
+
 }

+ 2 - 4
src/main/java/com/jtzx/crm/module/api/web/auth/AdminAuthController.java

@@ -2,7 +2,6 @@ package com.jtzx.crm.module.api.web.auth;
 
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
-import cc.uncarbon.framework.core.context.TenantContextHolder;
 import cc.uncarbon.framework.core.context.UserContext;
 import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.core.exception.BusinessException;
@@ -22,6 +21,7 @@ import com.jtzx.crm.aspect.extension.SysLogAspectExtensionForSysUserSmsCodeLogin
 import com.jtzx.crm.helper.CaptchaHelper;
 import com.jtzx.crm.helper.RolePermissionCacheHelper;
 import com.jtzx.crm.module.api.constant.ApiConstant;
+import com.jtzx.crm.module.api.constant.CommitConstant;
 import com.jtzx.crm.module.api.constant.LimitConstant;
 import com.jtzx.crm.module.api.constant.RedisConstant;
 import com.jtzx.crm.module.api.model.interior.AdminCaptchaContainer;
@@ -175,7 +175,7 @@ public class AdminAuthController {
     @GetMapping(value = "/auth/smsCodeLogin")
     public ApiResult<LoginRespDataVO> smsCodeLogin(@RequestParam String username,
                                                    @Pattern(message = "手机号格式有误", regexp = HelioConstant.Regex.CHINA_MAINLAND_PHONE_NO) @RequestParam String mobile,
-                                                   @RequestParam String smsCode) {
+                                                   @Pattern(message = "验证码格式有误", regexp = CommitConstant.SMS_CODE) @RequestParam String smsCode) {
 
         //账号密码redis中存储的用户信息
         SysUserLoginBO userInfo = this.getLoginUserInfo(mobile);
@@ -238,8 +238,6 @@ public class AdminAuthController {
     public ApiResult<Void> logout() {
         CrmAdminStpUtil.logout();
         UserContextHolder.clear();
-        TenantContextHolder.clear();
-
         return ApiResult.success();
     }
 

+ 6 - 3
src/main/resources/application.yml

@@ -65,6 +65,7 @@ helio:
       - /admin/api/v1/auth/accountlogin
       - /admin/api/v1/auth/sms/smsCode
       - /admin/api/v1/auth/smsCodeLogin
+      - /admin/api/v1/auth/captcha
       - /admin/api/v1/sms/captcha
   tenant:
     # 是否开启多租户,详情请见文档【进阶使用-多租户】
@@ -113,7 +114,9 @@ sa-token:
   # token风格
   token-style: tik
   # 是否允许同一账号并发登录
-  is-concurrent: false
+  is-concurrent: true
+  # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
+  is-share: false
   # 打印banner
   is-print: false
   # 是否尝试从请求体里读取token
@@ -121,8 +124,8 @@ sa-token:
   # 是否尝试从cookie里读取token
   is-read-cookie: false
   # 有效期解释:https://sa-token.cc/doc.html#/fun/token-timeout
-  # token 有效期,单位=秒;默认30天,-1代表永不过期
-  timeout: 2592000
+  # token 有效期,单位=秒;默认7天,-1代表永不过期
+  timeout: 604800
   # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
   active-timeout: 28800  #8小时