Browse Source

bump: 发布1.7.1

details see: https://helio.uncarbon.cc/#/i18n/zh-CN/appendix/change-log
Uncarbon 3 years ago
parent
commit
83f387e015

+ 2 - 2
pom.xml

@@ -7,12 +7,12 @@
     <parent>
         <groupId>cc.uncarbon.framework</groupId>
         <artifactId>helio-starters</artifactId>
-        <version>1.7.0</version>
+        <version>1.7.1</version>
     </parent>
 
     <artifactId>helio-boot</artifactId>
     <!-- 程序版本号,建议每次打包发布时都调整以作区分 -->
-    <version>1.7.0</version>
+    <version>1.7.1</version>
 
     <properties>
     </properties>

+ 3 - 1
src/main/java/cc/uncarbon/helper/CaptchaHelper.java

@@ -3,11 +3,12 @@ package cc.uncarbon.helper;
 import cn.hutool.captcha.CaptchaUtil;
 import cn.hutool.captcha.ShearCaptcha;
 import cn.hutool.core.util.StrUtil;
-import java.util.concurrent.TimeUnit;
 import lombok.RequiredArgsConstructor;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
+import java.util.concurrent.TimeUnit;
+
 /**
  * 验证码助手类;可将验证码答案缓存至 Redis
  *
@@ -43,6 +44,7 @@ public class CaptchaHelper {
      *
      * @param uuid          UUID
      * @param captchaAnswer 验证码答案
+     * @param removeWhenEquals 匹配时自动移除缓存键
      * @return 是否正确
      */
     public boolean validate(String uuid, String captchaAnswer, boolean removeWhenEquals) {

+ 0 - 32
src/main/java/cc/uncarbon/module/sys/enums/UserTypeEnum.java

@@ -1,32 +0,0 @@
-package cc.uncarbon.module.sys.enums;
-
-
-import cc.uncarbon.framework.core.enums.HelioBaseEnum;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-
-/**
- * 用户类型枚举类
- * @author Uncarbon
- */
-@AllArgsConstructor
-@Getter
-public enum UserTypeEnum implements HelioBaseEnum<Integer> {
-
-    /**
-     * 后台管理用户
-     */
-    ADMIN_USER(1, "后台管理用户"),
-
-    /**
-     * C端个人用户
-     * 未来可以自行扩展企业用户
-     */
-    APP_USER_INDIVIDUAL(2, "C端个人用户"),
-    ;
-
-    private final Integer value;
-    private final String label;
-
-}

+ 311 - 51
src/main/java/cc/uncarbon/module/sys/util/AdminStpUtil.java

@@ -6,7 +6,6 @@ import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.SaLoginModel;
 import cn.dev33.satoken.stp.SaTokenInfo;
 import cn.dev33.satoken.stp.StpLogic;
-import cn.dev33.satoken.stp.StpUtil;
 import lombok.experimental.UtilityClass;
 
 import java.util.List;
@@ -29,7 +28,7 @@ public class AdminStpUtil {
     /**
      * 底层的 StpLogic 对象
      */
-    public static final StpLogic stpLogic = new StpLogic(TYPE);
+    public static StpLogic stpLogic = new StpLogic(TYPE);
 
     /**
      * 获取当前 StpLogic 的账号类型
@@ -41,16 +40,30 @@ public class AdminStpUtil {
 
     /**
      * 重置 StpLogic 对象
-     * @param stpLogic /
+     * <br> 1、更改此账户的 StpLogic 对象
+     * <br> 2、put 到全局 StpLogic 集合中
+     *
+     * @param newStpLogic /
+     */
+    public static void setStpLogic(StpLogic newStpLogic) {
+        // 重置此账户的 StpLogic 对象
+        stpLogic = newStpLogic;
+
+        // 添加到全局 StpLogic 集合中
+        // 以便可以通过 SaManager.getStpLogic(type) 的方式来全局获取到这个 StpLogic
+        SaManager.putStpLogic(newStpLogic);
+    }
+
+    /**
+     * 获取 StpLogic 对象
+     * @return /
      */
-    public static void setStpLogic(StpLogic stpLogic) {
-        StpUtil.stpLogic = stpLogic;
-        // 防止自定义 stpLogic 被覆盖
-        SaManager.putStpLogic(stpLogic);
+    public static StpLogic getStpLogic() {
+        return stpLogic;
     }
 
 
-    // =================== 获取token 相关 ===================
+    // ------------------- 获取token 相关 -------------------
 
     /**
      * 返回token名称
@@ -60,6 +73,14 @@ public class AdminStpUtil {
         return stpLogic.getTokenName();
     }
 
+    /**
+     * 在当前会话写入当前TokenValue
+     * @param tokenValue token值
+     */
+    public static void setTokenValue(String tokenValue){
+        stpLogic.setTokenValue(tokenValue);
+    }
+
     /**
      * 在当前会话写入当前TokenValue
      * @param tokenValue token值
@@ -77,6 +98,14 @@ public class AdminStpUtil {
         return stpLogic.getTokenValue();
     }
 
+    /**
+     * 获取当前TokenValue (不裁剪前缀)
+     * @return /
+     */
+    public static String getTokenValueNotCut(){
+        return stpLogic.getTokenValueNotCut();
+    }
+
     /**
      * 获取当前会话的Token信息
      * @return token信息
@@ -86,7 +115,7 @@ public class AdminStpUtil {
     }
 
 
-    // =================== 登录相关操作 ===================
+    // ------------------- 登录相关操作 -------------------
 
     // --- 登录
 
@@ -99,9 +128,9 @@ public class AdminStpUtil {
     }
 
     /**
-     * 会话登录,并指定登录设备
+     * 会话登录,并指定登录设备类型
      * @param id 账号id,建议的类型:(long | int | String)
-     * @param device 设备标识
+     * @param device 设备类型
      */
     public static void login(Object id, String device) {
         stpLogic.login(id, device);
@@ -109,22 +138,53 @@ public class AdminStpUtil {
 
     /**
      * 会话登录,并指定是否 [记住我]
-     * @param id 账号id,建议的类型:(long | int | String)
+     *
+     * @param id              账号id,建议的类型:(long | int | String)
      * @param isLastingCookie 是否为持久Cookie
      */
     public static void login(Object id, boolean isLastingCookie) {
         stpLogic.login(id, isLastingCookie);
     }
 
+    /**
+     * 会话登录,并指定此次登录token的有效期, 单位:秒
+     *
+     * @param id      账号id,建议的类型:(long | int | String)
+     * @param timeout 此次登录token的有效期, 单位:秒 (如未指定,自动取全局配置的timeout值)
+     */
+    public static void login(Object id, long timeout) {
+        stpLogic.login(id, timeout);
+    }
+
     /**
      * 会话登录,并指定所有登录参数Model
-     * @param id 登录id,建议的类型:(long | int | String)
+     *
+     * @param id         登录id,建议的类型:(long | int | String)
      * @param loginModel 此次登录的参数Model
      */
     public static void login(Object id, SaLoginModel loginModel) {
         stpLogic.login(id, loginModel);
     }
 
+    /**
+     * 创建指定账号id的登录会话
+     * @param id 登录id,建议的类型:(long | int | String)
+     * @return 返回会话令牌
+     */
+    public static String createLoginSession(Object id) {
+        return stpLogic.createLoginSession(id);
+    }
+
+    /**
+     * 创建指定账号id的登录会话
+     * @param id 登录id,建议的类型:(long | int | String)
+     * @param loginModel 此次登录的参数Model
+     * @return 返回会话令牌
+     */
+    public static String createLoginSession(Object id, SaLoginModel loginModel) {
+        return stpLogic.createLoginSession(id, loginModel);
+    }
+
     // --- 注销
 
     /**
@@ -143,10 +203,10 @@ public class AdminStpUtil {
     }
 
     /**
-     * 会话注销,根据账号id 和 设备标识
+     * 会话注销,根据账号id 和 设备类型
      *
      * @param loginId 账号id
-     * @param device 设备标识 (填null代表所有注销设备)
+     * @param device 设备类型 (填null代表注销所有设备类型)
      */
     public static void logout(Object loginId, String device) {
         stpLogic.logout(loginId, device);
@@ -172,11 +232,11 @@ public class AdminStpUtil {
     }
 
     /**
-     * 踢人下线,根据账号id 和 设备标识
+     * 踢人下线,根据账号id 和 设备类型
      * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 </p>
      *
      * @param loginId 账号id
-     * @param device 设备标识 (填null代表踢出所有设备)
+     * @param device 设备类型 (填null代表踢出所有设备类型)
      */
     public static void kickout(Object loginId, String device) {
         stpLogic.kickout(loginId, device);
@@ -193,11 +253,11 @@ public class AdminStpUtil {
     }
 
     /**
-     * 顶人下线,根据账号id 和 设备标识
+     * 顶人下线,根据账号id 和 设备类型
      * <p> 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-4 </p>
      *
      * @param loginId 账号id
-     * @param device 设备标识 (填null代表顶替所有设备)
+     * @param device 设备类型 (填null代表顶替所有设备类型)
      */
     public static void replaced(Object loginId, String device) {
         stpLogic.replaced(loginId, device);
@@ -280,8 +340,27 @@ public class AdminStpUtil {
         return stpLogic.getLoginIdByToken(tokenValue);
     }
 
+    /**
+     * 获取当前 Token 的扩展信息(此函数只在jwt模式下生效)
+     * @param key 键值
+     * @return 对应的扩展数据
+     */
+    public static Object getExtra(String key) {
+        return stpLogic.getExtra(key);
+    }
+
+    /**
+     * 获取指定 Token 的扩展信息(此函数只在jwt模式下生效)
+     * @param tokenValue 指定的 Token 值
+     * @param key 键值
+     * @return 对应的扩展数据
+     */
+    public static Object getExtra(String tokenValue, String key) {
+        return stpLogic.getExtra(tokenValue, key);
+    }
+
 
-    // =================== User-Session 相关 ===================
+    // ------------------- User-Session 相关 -------------------
 
     /**
      * 获取指定账号id的Session, 如果Session尚未创建,isCreate=是否新建并返回
@@ -329,7 +408,7 @@ public class AdminStpUtil {
     }
 
 
-    // =================== Token-Session 相关 ===================
+    // ------------------- Token-Session 相关 -------------------
 
     /**
      * 获取指定Token-Session,如果Session尚未创建,则新建并返回
@@ -348,8 +427,16 @@ public class AdminStpUtil {
         return stpLogic.getTokenSession();
     }
 
+    /**
+     * 获取当前匿名 Token-Session (可在未登录情况下使用的Token-Session)
+     * @return Token-Session 对象
+     */
+    public static SaSession getAnonTokenSession() {
+        return stpLogic.getAnonTokenSession();
+    }
 
-    // =================== [临时过期] 验证相关 ===================
+
+    // ------------------- [临时有效期] 验证相关 -------------------
 
     /**
      * 检查当前token 是否已经[临时过期],如果已经过期则抛出异常
@@ -360,7 +447,7 @@ public class AdminStpUtil {
 
     /**
      * 续签当前token:(将 [最后操作时间] 更新为当前时间戳)
-     * <h1>请注意: 即token已经 [临时过期] 也可续签成功,
+     * <h1>请注意: 即使token已经 [临时过期] 也可续签成功,
      * 如果此场景下需要提示续签失败,可在此之前调用 checkActivityTimeout() 强制检查是否过期即可 </h1>
      */
     public static void updateLastActivityToNow() {
@@ -368,7 +455,7 @@ public class AdminStpUtil {
     }
 
 
-    // =================== 过期时间相关 ===================
+    // ------------------- 过期时间相关 -------------------
 
     /**
      * 获取当前登录者的 token 剩余有效时间 (单位: 秒)
@@ -402,9 +489,25 @@ public class AdminStpUtil {
         return stpLogic.getTokenActivityTimeout();
     }
 
+    /**
+     * 对当前 Token 的 timeout 值进行续期
+     * @param timeout 要修改成为的有效时间 (单位: 秒)
+     */
+    public static void renewTimeout(long timeout) {
+        stpLogic.renewTimeout(timeout);
+    }
+
+    /**
+     * 对指定 Token 的 timeout 值进行续期
+     * @param tokenValue 指定token
+     * @param timeout 要修改成为的有效时间 (单位: 秒)
+     */
+    public static void renewTimeout(String tokenValue, long timeout) {
+        stpLogic.renewTimeout(tokenValue, timeout);
+    }
 
 
-    // =================== 角色验证操作 ===================
+    // ------------------- 角色验证操作 -------------------
 
     /**
      * 获取:当前账号的角色集合
@@ -485,7 +588,7 @@ public class AdminStpUtil {
     }
 
 
-    // =================== 权限验证操作 ===================
+    // ------------------- 权限验证操作 -------------------
 
     /**
      * 获取:当前账号的权限码集合
@@ -566,7 +669,7 @@ public class AdminStpUtil {
     }
 
 
-    // =================== id 反查token 相关操作 ===================
+    // ------------------- id 反查token 相关操作 -------------------
 
     /**
      * 获取指定账号id的tokenValue
@@ -580,11 +683,11 @@ public class AdminStpUtil {
     }
 
     /**
-     * 获取指定账号id指定设备端的tokenValue
+     * 获取指定账号id指定设备类型端的tokenValue
      * <p> 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
      * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
      * @param loginId 账号id
-     * @param device 设备标识
+     * @param device 设备类型
      * @return token值
      */
     public static String getTokenValueByLoginId(Object loginId, String device) {
@@ -601,9 +704,9 @@ public class AdminStpUtil {
     }
 
     /**
-     * 获取指定账号id指定设备端的tokenValue 集合
+     * 获取指定账号id指定设备类型端的tokenValue 集合
      * @param loginId 账号id
-     * @param device 设备标识
+     * @param device 设备类型
      * @return 此loginId的所有相关token
      */
     public static List<String> getTokenValueListByLoginId(Object loginId, String device) {
@@ -611,25 +714,27 @@ public class AdminStpUtil {
     }
 
     /**
-     * 返回当前会话的登录设备
-     * @return 当前令牌的登录设备
+     * 返回当前会话的登录设备类型
+     * @return 当前令牌的登录设备类型
      */
     public static String getLoginDevice() {
         return stpLogic.getLoginDevice();
     }
 
 
-    // =================== 会话管理 ===================
+    // ------------------- 会话管理 -------------------
 
     /**
      * 根据条件查询Token
      * @param keyword 关键字
      * @param start 开始处索引 (-1代表查询所有)
      * @param size 获取数量
+     * @param sortType 排序类型(true=正序,false=反序)
+     *
      * @return token集合
      */
-    public static List<String> searchTokenValue(String keyword, int start, int size) {
-        return stpLogic.searchTokenValue(keyword, start, size);
+    public static List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
+        return stpLogic.searchTokenValue(keyword, start, size, sortType);
     }
 
     /**
@@ -637,10 +742,12 @@ public class AdminStpUtil {
      * @param keyword 关键字
      * @param start 开始处索引 (-1代表查询所有)
      * @param size 获取数量
+     * @param sortType 排序类型(true=正序,false=反序)
+     *
      * @return sessionId集合
      */
-    public static List<String> searchSessionId(String keyword, int start, int size) {
-        return stpLogic.searchSessionId(keyword, start, size);
+    public static List<String> searchSessionId(String keyword, int start, int size, boolean sortType) {
+        return stpLogic.searchSessionId(keyword, start, size, sortType);
     }
 
     /**
@@ -648,45 +755,57 @@ public class AdminStpUtil {
      * @param keyword 关键字
      * @param start 开始处索引 (-1代表查询所有)
      * @param size 获取数量
+     * @param sortType 排序类型(true=正序,false=反序)
+     *
      * @return sessionId集合
      */
-    public static List<String> searchTokenSessionId(String keyword, int start, int size) {
-        return stpLogic.searchTokenSessionId(keyword, start, size);
+    public static List<String> searchTokenSessionId(String keyword, int start, int size, boolean sortType) {
+        return stpLogic.searchTokenSessionId(keyword, start, size, sortType);
     }
 
 
     // ------------------- 账号封禁 -------------------
 
     /**
-     * 封禁指定账号
-     * <p> 此方法不会直接将此账号id踢下线,而是在对方再次登录时抛出`DisableLoginException`异常
+     * 封禁:指定账号
+     * <p> 此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id)
+     *
      * @param loginId 指定账号id
-     * @param disableTime 封禁时间, 单位: 秒 (-1=永久封禁)
+     * @param time 封禁时间, 单位: 秒 (-1=永久封禁)
      */
-    public static void disable(Object loginId, long disableTime) {
-        stpLogic.disable(loginId, disableTime);
+    public static void disable(Object loginId, long time) {
+        stpLogic.disable(loginId, time);
     }
 
     /**
-     * 指定账号是否已被封禁 (true=已被封禁, false=未被封禁)
+     * 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁)
+     *
      * @param loginId 账号id
-     * @return see note
+     * @return /
      */
     public static boolean isDisable(Object loginId) {
         return stpLogic.isDisable(loginId);
     }
 
     /**
-     * 获取指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
+     * 校验:指定账号是否已被封禁,如果被封禁则抛出异常
      * @param loginId 账号id
-     * @return see note
+     */
+    public static void checkDisable(Object loginId) {
+        stpLogic.checkDisable(loginId);
+    }
+
+    /**
+     * 获取:指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
+     * @param loginId 账号id
+     * @return /
      */
     public static long getDisableTime(Object loginId) {
         return stpLogic.getDisableTime(loginId);
     }
 
     /**
-     * 解封指定账号
+     * 解封指定账号
      * @param loginId 账号id
      */
     public static void untieDisable(Object loginId) {
@@ -694,7 +813,148 @@ public class AdminStpUtil {
     }
 
 
-    // =================== 身份切换 ===================
+    // ------------------- 分类封禁 -------------------
+
+    /**
+     * 封禁:指定账号的指定服务
+     * <p> 此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id)
+     * @param loginId 指定账号id
+     * @param service 指定服务
+     * @param time 封禁时间, 单位: 秒 (-1=永久封禁)
+     */
+    public static void disable(Object loginId, String service, long time) {
+        stpLogic.disable(loginId, service, time);
+    }
+
+    /**
+     * 判断:指定账号的指定服务 是否已被封禁 (true=已被封禁, false=未被封禁)
+     * @param loginId 账号id
+     * @param service 指定服务
+     * @return /
+     */
+    public static boolean isDisable(Object loginId, String service) {
+        return stpLogic.isDisable(loginId, service);
+    }
+
+    /**
+     * 校验:指定账号 指定服务 是否已被封禁,如果被封禁则抛出异常
+     * @param loginId 账号id
+     * @param services 指定服务,可以指定多个
+     */
+    public static void checkDisable(Object loginId, String... services) {
+        stpLogic.checkDisable(loginId, services);
+    }
+
+    /**
+     * 获取:指定账号 指定服务 剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁)
+     * @param loginId 账号id
+     * @param service 指定服务
+     * @return see note
+     */
+    public static long getDisableTime(Object loginId, String service) {
+        return stpLogic.getDisableTime(loginId, service);
+    }
+
+    /**
+     * 解封:指定账号、指定服务
+     * @param loginId 账号id
+     * @param services 指定服务,可以指定多个
+     */
+    public static void untieDisable(Object loginId, String... services) {
+        stpLogic.untieDisable(loginId, services);
+    }
+
+
+    // ------------------- 阶梯封禁 -------------------
+
+    /**
+     * 封禁:指定账号,并指定封禁等级
+     * @param loginId 指定账号id
+     * @param level 指定封禁等级
+     * @param time 封禁时间, 单位: 秒 (-1=永久封禁)
+     */
+    public static void disableLevel(Object loginId, int level, long time) {
+        stpLogic.disableLevel(loginId, level, time);
+    }
+
+    /**
+     * 封禁:指定账号的指定服务,并指定封禁等级
+     * @param loginId 指定账号id
+     * @param service 指定封禁服务
+     * @param level 指定封禁等级
+     * @param time 封禁时间, 单位: 秒 (-1=永久封禁)
+     */
+    public static void disableLevel(Object loginId, String service, int level, long time) {
+        stpLogic.disableLevel(loginId, service, level, time);
+    }
+
+    /**
+     * 判断:指定账号是否已被封禁到指定等级
+     *
+     * @param loginId 指定账号id
+     * @param level 指定封禁等级
+     * @return /
+     */
+    public static boolean isDisableLevel(Object loginId, int level) {
+        return stpLogic.isDisableLevel(loginId, level);
+    }
+
+    /**
+     * 判断:指定账号的指定服务,是否已被封禁到指定等级
+     *
+     * @param loginId 指定账号id
+     * @param service 指定封禁服务
+     * @param level 指定封禁等级
+     * @return /
+     */
+    public static boolean isDisableLevel(Object loginId, String service, int level) {
+        return stpLogic.isDisableLevel(loginId, service, level);
+    }
+
+    /**
+     * 校验:指定账号是否已被封禁到指定等级(如果已经达到,则抛出异常)
+     *
+     * @param loginId 指定账号id
+     * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常)
+     */
+    public static void checkDisableLevel(Object loginId, int level) {
+        stpLogic.checkDisableLevel(loginId, level);
+    }
+
+    /**
+     * 校验:指定账号的指定服务,是否已被封禁到指定等级(如果已经达到,则抛出异常)
+     *
+     * @param loginId 指定账号id
+     * @param service 指定封禁服务
+     * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常)
+     */
+    public static void checkDisableLevel(Object loginId, String service, int level) {
+        stpLogic.checkDisableLevel(loginId, service, level);
+    }
+
+    /**
+     * 获取:指定账号被封禁的等级,如果未被封禁则返回-2
+     *
+     * @param loginId 指定账号id
+     * @return /
+     */
+    public static int getDisableLevel(Object loginId) {
+        return stpLogic.getDisableLevel(loginId);
+    }
+
+    /**
+     * 获取:指定账号的 指定服务 被封禁的等级,如果未被封禁则返回-2
+     *
+     * @param loginId 指定账号id
+     * @param service 指定封禁服务
+     * @return /
+     */
+    public static int getDisableLevel(Object loginId, String service) {
+        return stpLogic.getDisableLevel(loginId, service);
+    }
+
+
+    // ------------------- 身份切换 -------------------
 
     /**
      * 临时切换身份为指定账号id

+ 2 - 3
src/main/java/cc/uncarbon/module/sys/web/auth/AdminAuthController.java

@@ -12,7 +12,6 @@ import cc.uncarbon.helper.CaptchaHelper;
 import cc.uncarbon.helper.RolePermissionCacheHelper;
 import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
-import cc.uncarbon.module.sys.enums.UserTypeEnum;
 import cc.uncarbon.module.sys.model.request.SysUserLoginDTO;
 import cc.uncarbon.module.sys.model.response.SysUserLoginBO;
 import cc.uncarbon.module.sys.model.response.SysUserLoginVO;
@@ -65,7 +64,7 @@ public class AdminAuthController {
                 .userId(userInfo.getId())
                 .userName(userInfo.getUsername())
                 .userPhoneNo(userInfo.getPhoneNo())
-                .userType(UserTypeEnum.ADMIN_USER)
+                .userTypeStr("ADMIN_USER")
                 .extraData(null)
                 .rolesIds(userInfo.getRoleIds())
                 .roles(userInfo.getRoles())
@@ -112,7 +111,7 @@ public class AdminAuthController {
         // uuid 为空则抛出异常
         SysErrorEnum.UUID_CANNOT_BE_BLANK.assertNotBlank(uuid);
 
-        // 核验方法:captchaHelper.validate(uuid, true);
+        // 核验方法:captchaHelper.validate;
         AbstractCaptcha captcha = captchaHelper.generate(uuid);
 
         // 写入响应流

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

@@ -36,4 +36,5 @@ knife4j:
 
 mybatis-plus:
   configuration:
+    # 生产环境下建议去除该配置项,不在控制台打印SQL
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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

@@ -36,4 +36,5 @@ knife4j:
 
 mybatis-plus:
   configuration:
+    # 生产环境下建议去除该配置项,不在控制台打印SQL
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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

@@ -65,6 +65,7 @@ server:
   port: 7003
 
 mybatis-plus:
+  # XML扫描,支持统配符 * 或者 ; 分割
   mapper-locations: classpath*:/mapper/**/*.xml
 
 logging: