diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java index f2835eb0..b5132eb8 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java @@ -39,6 +39,13 @@ public class StaticConfig { StaticConfig.TAX_RATE_CALCULATE = new BigDecimal(taxRate).add(BigDecimal.ONE); } + public static Boolean needPassword; + + @Value("${jero.needPassword:true}") + public void setNeedPassword(Boolean needPassword) { + StaticConfig.needPassword = needPassword; + } + /*@Bean public void initStatic() { diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java index 39be4cc1..024fa82d 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyLoginController.java @@ -20,6 +20,7 @@ import com.jero.company.service.IPayCompanyManagementService; import com.jero.company.service.IPayContactsManagementService; import com.jero.company.vo.CompanyLoginVO; import com.jero.company.vo.Jscode2sessionVO; +import com.jero.config.StaticConfig; import com.jero.data.entity.PayCaseCouncilSubitem; import com.jero.data.service.IPayCaseCouncilSubitemService; import com.jero.modules.base.service.BaseCommonService; @@ -92,21 +93,24 @@ public class CompanyLoginController { //password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密 //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 //update-begin-author:taoyan date:20190828 for:校验验证码 - String captcha = sysLoginModel.getCaptcha(); - if (captcha == null) { - result.error500("验证码无效"); - return result; - } - String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); - Object checkCode = redisUtil.get(realKey); - //当进入登录页时,有一定几率出现验证码错误 #1714 - if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { - result.error500("验证码错误"); - return result; - } else { - redisUtil.del(realKey); + if (StaticConfig.needPassword){ + String captcha = sysLoginModel.getCaptcha(); + if (captcha == null) { + result.error500("验证码无效"); + return result; + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); + Object checkCode = redisUtil.get(realKey); + //当进入登录页时,有一定几率出现验证码错误 #1714 + if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { + result.error500("验证码错误"); + return result; + } else { + redisUtil.del(realKey); + } } + try { //解密获取密码和用户名 password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey); @@ -138,21 +142,24 @@ public class CompanyLoginController { result.error500("密码错误次数过多,密码错误次数过多,请"+passwordResetTime+"分钟后重试"); return result; } - //2. 校验用户名或密码是否正确 - String userpassword = PasswordUtil.encrypt(phone, password, contactsManagement.getSalt()); - String syspassword = contactsManagement.getPassword(); - if (!syspassword.equals(userpassword)) { - // 重试登录次数加一 - retryCount++; - if (retryCount == 1) { - redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, 60L * passwordResetTime); - } else { - redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + phone)); + if (StaticConfig.needPassword){ + //2. 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(phone, password, contactsManagement.getSalt()); + String syspassword = contactsManagement.getPassword(); + if (!syspassword.equals(userpassword)) { + // 重试登录次数加一 + retryCount++; + if (retryCount == 1) { + redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, 60L * passwordResetTime); + } else { + redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + phone)); + } + String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "手机号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); + result.error500(msg); + return result; } - String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "手机号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); - result.error500(msg); - return result; } + //登录成功,清除错误登录次数 redisUtil.del(RETRY_LOGIN_PREFIX + phone); @@ -182,19 +189,20 @@ public class CompanyLoginController { } catch (Exception e) { e.printStackTrace(); } - /*String captcha = sysLoginModel.getCaptcha(); - if (captcha == null) { - result.error500("验证码无效"); - return result; + if (StaticConfig.needPassword){ + String captcha = sysLoginModel.getCaptcha(); + if (captcha == null) { + result.error500("验证码无效"); + return result; + } + Object checkCode = redisUtil.get("_verification:_phone:" + phone); + if (checkCode == null || !Objects.equals(checkCode,captcha)) { + result.error500("验证码错误"); + return result; + } else { + redisUtil.del("_verification:_phone:" + phone); + } } - Object checkCode = redisUtil.get("_verification:_phone:" + phone); - if (checkCode == null || !Objects.equals(checkCode,captcha)) { - result.error500("验证码错误"); - return result; - } else { - redisUtil.del("_verification:_phone:" + phone); - }*/ - //1. 校验用户是否有效 //update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java index 44147ddd..5bed2c54 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/company/controller/CompanyManagerLoginController.java @@ -18,6 +18,7 @@ import com.jero.company.service.IPayCompanyManagementService; import com.jero.company.service.IPayContactsManagementService; import com.jero.company.service.IPayManagerManagementService; import com.jero.company.vo.CompanyManagerLoginVO; +import com.jero.config.StaticConfig; import com.jero.modules.base.service.BaseCommonService; import com.jero.modules.system.model.SysLoginModel; import com.jero.modules.system.service.ISysDictService; @@ -87,21 +88,24 @@ public class CompanyManagerLoginController { //password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密 //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 //update-begin-author:taoyan date:20190828 for:校验验证码 - String captcha = sysLoginModel.getCaptcha(); - if (captcha == null) { - result.error500("验证码无效"); - return result; - } - String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); - Object checkCode = redisUtil.get(realKey); - //当进入登录页时,有一定几率出现验证码错误 #1714 - if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { - result.error500("验证码错误"); - return result; - } else { - redisUtil.del(realKey); + if (StaticConfig.needPassword){ + String captcha = sysLoginModel.getCaptcha(); + if (captcha == null) { + result.error500("验证码无效"); + return result; + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); + Object checkCode = redisUtil.get(realKey); + //当进入登录页时,有一定几率出现验证码错误 #1714 + if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { + result.error500("验证码错误"); + return result; + } else { + redisUtil.del(realKey); + } } + try { //解密获取密码和用户名 password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey); @@ -133,21 +137,24 @@ public class CompanyManagerLoginController { result.error500("密码错误次数过多,密码错误次数过多,请"+passwordResetTime+"分钟后重试"); return result; } - //2. 校验用户名或密码是否正确 - String userpassword = PasswordUtil.encrypt(phone, password, managerManagement.getSalt()); - String syspassword = managerManagement.getPassword(); - if (!syspassword.equals(userpassword)) { - // 重试登录次数加一 - retryCount++; - if (retryCount == 1) { - redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, 60L * passwordResetTime); - } else { - redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + phone)); + if (StaticConfig.needPassword){ + //2. 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(phone, password, managerManagement.getSalt()); + String syspassword = managerManagement.getPassword(); + if (!syspassword.equals(userpassword)) { + // 重试登录次数加一 + retryCount++; + if (retryCount == 1) { + redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, 60L * passwordResetTime); + } else { + redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + phone)); + } + String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "手机号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); + result.error500(msg); + return result; } - String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "手机号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); - result.error500(msg); - return result; } + //登录成功,清除错误登录次数 redisUtil.del(RETRY_LOGIN_PREFIX + phone); diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java index 6ad21851..35d3e307 100644 --- a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.aliyuncs.exceptions.ClientException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.exception.JeroBootException; +import com.jero.config.StaticConfig; import com.jero.modules.system.entity.*; import com.jero.modules.system.model.SysLoginVO; import com.jero.modules.system.service.*; @@ -93,21 +94,24 @@ public class LoginController { //password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密 //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 //update-begin-author:taoyan date:20190828 for:校验验证码 - String captcha = sysLoginModel.getCaptcha(); - if (captcha == null) { - result.error500("验证码无效"); - return result; - } - String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); - Object checkCode = redisUtil.get(realKey); - //当进入登录页时,有一定几率出现验证码错误 #1714 - if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { - result.error500("验证码错误"); - return result; - } else { - redisUtil.del(realKey); + if (StaticConfig.needPassword){ + String captcha = sysLoginModel.getCaptcha(); + if (captcha == null) { + result.error500("验证码无效"); + return result; + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); + Object checkCode = redisUtil.get(realKey); + //当进入登录页时,有一定几率出现验证码错误 #1714 + if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { + result.error500("验证码错误"); + return result; + } else { + redisUtil.del(realKey); + } } + try { //解密获取密码和用户名 password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey); @@ -136,21 +140,24 @@ public class LoginController { result.error500("密码错误次数过多,请"+passwordResetTime+"分钟后重试"); return result; } - //2. 校验用户名或密码是否正确 - String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); - String syspassword = sysUser.getPassword(); - if (!syspassword.equals(userpassword)) { - // 重试登录次数加一 - retryCount++; - if (retryCount == 1) { - redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, 60 * passwordResetTime); - } else { - redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + username)); + if (StaticConfig.needPassword){ + //2. 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); + String syspassword = sysUser.getPassword(); + if (!syspassword.equals(userpassword)) { + // 重试登录次数加一 + retryCount++; + if (retryCount == 1) { + redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, 60 * passwordResetTime); + } else { + redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + username)); + } + String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "账号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); + result.error500(msg); + return result; } - String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请"+passwordResetTime+"分钟后重试" : "账号或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); - result.error500(msg); - return result; } + //登录成功,清除错误登录次数 redisUtil.del(RETRY_LOGIN_PREFIX + username); //如果用初始密码登录,前端就跳转到修改密码界面 diff --git a/jero-boot-single-startup/src/main/resources/application-dev.yml b/jero-boot-single-startup/src/main/resources/application-dev.yml index c159c72c..d4c23696 100644 --- a/jero-boot-single-startup/src/main/resources/application-dev.yml +++ b/jero-boot-single-startup/src/main/resources/application-dev.yml @@ -263,6 +263,7 @@ jero: # origin地址 originIp: http://localhost:3000,http://localhost:3001,http://localhost:8080,http://localhost:8081,127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:8080,10.0.1.70:3000,10.0.1.81:3000,10.0.1.81:8080,192.168.1.7:8080,192.168.1.7:3000,192.168.1.7:3001,121.36.69.172:4780 + needPassword: false #cas单点登录 cas: prefixUrl: http://cas.example.org:8443/cas