Browse Source

参数管理支持配置验证码开关

RuoYi 3 years ago
parent
commit
7b894da43c

+ 12 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java

@@ -17,6 +17,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.sign.Base64;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.system.service.ISysConfigService;
 
 /**
  * 验证码操作处理
@@ -38,13 +39,23 @@ public class CaptchaController
     // 验证码类型
     @Value("${ruoyi.captchaType}")
     private String captchaType;
-
+    
+    @Autowired
+    private ISysConfigService configService;
     /**
      * 生成验证码
      */
     @GetMapping("/captchaImage")
     public AjaxResult getCode(HttpServletResponse response) throws IOException
     {
+        AjaxResult ajax = AjaxResult.success();
+        boolean captchaOnOff = configService.selectCaptchaOnOff();
+        ajax.put("captchaOnOff", captchaOnOff);
+        if (!captchaOnOff)
+        {
+            return ajax;
+        }
+
         // 保存验证码信息
         String uuid = IdUtils.simpleUUID();
         String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
@@ -78,7 +89,6 @@ public class CaptchaController
             return AjaxResult.error(e.getMessage());
         }
 
-        AjaxResult ajax = AjaxResult.success();
         ajax.put("uuid", uuid);
         ajax.put("img", Base64.encode(os.toByteArray()));
         return ajax;

+ 33 - 11
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -21,6 +21,7 @@ import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.ip.IpUtils;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
+import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
 
 /**
@@ -43,6 +44,9 @@ public class SysLoginService
     @Autowired
     private ISysUserService userService;
 
+    @Autowired
+    private ISysConfigService configService;
+
     /**
      * 登录验证
      * 
@@ -54,18 +58,11 @@ public class SysLoginService
      */
     public String login(String username, String password, String code, String uuid)
     {
-        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
-        String captcha = redisCache.getCacheObject(verifyKey);
-        redisCache.deleteObject(verifyKey);
-        if (captcha == null)
-        {
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
-            throw new CaptchaExpireException();
-        }
-        if (!code.equalsIgnoreCase(captcha))
+        boolean captchaOnOff = configService.selectCaptchaOnOff();
+        // 验证码开关
+        if (captchaOnOff)
         {
-            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
-            throw new CaptchaException();
+            validateCapcha(username, code, uuid);
         }
         // 用户验证
         Authentication authentication = null;
@@ -95,6 +92,31 @@ public class SysLoginService
         return tokenService.createToken(loginUser);
     }
 
+    /**
+     * 校验验证码
+     * 
+     * @param username 用户名
+     * @param code 验证码
+     * @param uuid 唯一标识
+     * @return 结果
+     */
+    public void validateCapcha(String username, String code, String uuid)
+    {
+        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+        String captcha = redisCache.getCacheObject(verifyKey);
+        redisCache.deleteObject(verifyKey);
+        if (captcha == null)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+            throw new CaptchaExpireException();
+        }
+        if (!code.equalsIgnoreCase(captcha))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+            throw new CaptchaException();
+        }
+    }
+
     /**
      * 记录登录信息
      */

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java

@@ -26,6 +26,13 @@ public interface ISysConfigService
      */
     public String selectConfigByKey(String configKey);
 
+    /**
+     * 获取验证码开关
+     * 
+     * @return true开启,false关闭
+     */
+    public boolean selectCaptchaOnOff();
+
     /**
      * 查询参数配置列表
      * 

+ 15 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java

@@ -80,6 +80,21 @@ public class SysConfigServiceImpl implements ISysConfigService
         return StringUtils.EMPTY;
     }
 
+    /**
+     * 获取验证码开关
+     * 
+     * @return true开启,false关闭
+     */
+    public boolean selectCaptchaOnOff()
+    {
+        String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff");
+        if (StringUtils.isEmpty(captchaOnOff))
+        {
+            return true;
+        }
+        return Convert.toBool(captchaOnOff);
+    }
+
     /**
      * 查询参数配置列表
      * 

+ 10 - 4
ruoyi-ui/src/views/login.vue

@@ -18,7 +18,7 @@
           <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
         </el-input>
       </el-form-item>
-      <el-form-item prop="code">
+      <el-form-item prop="code" v-if="captchaOnOff">
         <el-input
           v-model="loginForm.code"
           auto-complete="off"
@@ -81,6 +81,7 @@ export default {
         code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
       },
       loading: false,
+      captchaOnOff: true,
       redirect: undefined
     };
   },
@@ -99,8 +100,11 @@ export default {
   methods: {
     getCode() {
       getCodeImg().then(res => {
-        this.codeUrl = "data:image/gif;base64," + res.img;
-        this.loginForm.uuid = res.uuid;
+        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
+        if (this.captchaOnOff) {
+          this.codeUrl = "data:image/gif;base64," + res.img;
+          this.loginForm.uuid = res.uuid;
+        }
       });
     },
     getCookie() {
@@ -130,7 +134,9 @@ export default {
             this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
           }).catch(() => {
             this.loading = false;
-            this.getCode();
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
           });
         }
       });

File diff suppressed because it is too large
+ 685 - 581
sql/ry_20210210.sql