From c1c7c208155a7747fb017886688348de92d48ab9 Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期二, 13 七月 2021 10:17:18 +0800 Subject: [PATCH] 新增验证码开关 --- src/main/java/com/ruoyi/framework/security/service/SysLoginService.java | 46 +++++++++++++++++------ src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java | 15 +++++++ sql/ry_20210713.sql | 7 ++- src/main/java/com/ruoyi/project/common/CaptchaController.java | 13 ++++++ src/main/java/com/ruoyi/project/system/service/ISysConfigService.java | 7 +++ 5 files changed, 72 insertions(+), 16 deletions(-) diff --git a/sql/ry_20210210.sql b/sql/ry_20210713.sql similarity index 98% rename from sql/ry_20210210.sql rename to sql/ry_20210713.sql index d78be11..dc59767 100644 --- a/sql/ry_20210210.sql +++ b/sql/ry_20210713.sql @@ -534,9 +534,10 @@ primary key (config_id) ) engine=innodb auto_increment=100 comment = '鍙傛暟閰嶇疆琛�'; -insert into sys_config values(1, '涓绘鏋堕〉-榛樿鐨偆鏍峰紡鍚嶇О', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, '钃濊壊 skin-blue銆佺豢鑹� skin-green銆佺传鑹� skin-purple銆佺孩鑹� skin-red銆侀粍鑹� skin-yellow' ); -insert into sys_config values(2, '鐢ㄦ埛绠$悊-璐﹀彿鍒濆瀵嗙爜', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, '鍒濆鍖栧瘑鐮� 123456' ); -insert into sys_config values(3, '涓绘鏋堕〉-渚ц竟鏍忎富棰�', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '娣辫壊涓婚theme-dark锛屾祬鑹蹭富棰榯heme-light' ); +insert into sys_config values(1, '涓绘鏋堕〉-榛樿鐨偆鏍峰紡鍚嶇О', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, '钃濊壊 skin-blue銆佺豢鑹� skin-green銆佺传鑹� skin-purple銆佺孩鑹� skin-red銆侀粍鑹� skin-yellow' ); +insert into sys_config values(2, '鐢ㄦ埛绠$悊-璐﹀彿鍒濆瀵嗙爜', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, '鍒濆鍖栧瘑鐮� 123456' ); +insert into sys_config values(3, '涓绘鏋堕〉-渚ц竟鏍忎富棰�', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '娣辫壊涓婚theme-dark锛屾祬鑹蹭富棰榯heme-light' ); +insert into sys_config values(4, '璐﹀彿鑷姪-楠岃瘉鐮佸紑鍏�', 'sys.account.captchaOnOff', 'true', 'Y', 'admin', sysdate(), '', null, '鏄惁寮�鍚櫥褰曢獙璇佺爜鍔熻兘锛坱rue寮�鍚紝false鍏抽棴锛�'); -- ---------------------------- diff --git a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java index 0059791..b9b737d 100644 --- a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java +++ b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java @@ -21,6 +21,7 @@ import com.ruoyi.framework.redis.RedisCache; import com.ruoyi.framework.security.LoginUser; import com.ruoyi.project.system.domain.SysUser; +import com.ruoyi.project.system.service.ISysConfigService; import com.ruoyi.project.system.service.ISysUserService; /** @@ -39,9 +40,12 @@ @Autowired private RedisCache redisCache; - + @Autowired private ISysUserService userService; + + @Autowired + private ISysConfigService configService; /** * 鐧诲綍楠岃瘉 @@ -54,18 +58,11 @@ */ 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) + boolean captchaOnOff = configService.selectCaptchaOnOff(); + // 楠岃瘉鐮佸紑鍏� + if (captchaOnOff) { - 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(); + validateCapcha(username, code, uuid); } // 鐢ㄦ埛楠岃瘉 Authentication authentication = null; @@ -96,6 +93,31 @@ } /** + * 鏍¢獙楠岃瘉鐮� + * + * @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(); + } + } + + /** * 璁板綍鐧诲綍淇℃伅 */ public void recordLoginInfo(SysUser user) diff --git a/src/main/java/com/ruoyi/project/common/CaptchaController.java b/src/main/java/com/ruoyi/project/common/CaptchaController.java index 1e4933b..fecf890 100644 --- a/src/main/java/com/ruoyi/project/common/CaptchaController.java +++ b/src/main/java/com/ruoyi/project/common/CaptchaController.java @@ -17,6 +17,7 @@ import com.ruoyi.common.utils.sign.Base64; import com.ruoyi.framework.redis.RedisCache; import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.project.system.service.ISysConfigService; /** * 楠岃瘉鐮佹搷浣滃鐞� @@ -38,6 +39,9 @@ // 楠岃瘉鐮佺被鍨� @Value("${ruoyi.captchaType}") private String captchaType; + + @Autowired + private ISysConfigService configService; /** * 鐢熸垚楠岃瘉鐮� @@ -45,6 +49,14 @@ @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 +90,6 @@ return AjaxResult.error(e.getMessage()); } - AjaxResult ajax = AjaxResult.success(); ajax.put("uuid", uuid); ajax.put("img", Base64.encode(os.toByteArray())); return ajax; diff --git a/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java b/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java index 0e58b60..33f4b84 100644 --- a/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java +++ b/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java @@ -27,6 +27,13 @@ public String selectConfigByKey(String configKey); /** + * 鑾峰彇楠岃瘉鐮佸紑鍏� + * + * @return true寮�鍚紝false鍏抽棴 + */ + public boolean selectCaptchaOnOff(); + + /** * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃 * * @param config 鍙傛暟閰嶇疆淇℃伅 diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java index 1769405..5c4500d 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java @@ -78,6 +78,21 @@ } /** + * 鑾峰彇楠岃瘉鐮佸紑鍏� + * + * @return true寮�鍚紝false鍏抽棴 + */ + public boolean selectCaptchaOnOff() + { + String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff"); + if (StringUtils.isEmpty(captchaOnOff)) + { + return true; + } + return Convert.toBool(captchaOnOff); + } + + /** * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃 * * @param config 鍙傛暟閰嶇疆淇℃伅 -- Gitblit v1.9.3