From 0baeb5d2b147bf29add1e5373652ae70dd749b69 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期五, 24 三月 2023 21:08:55 +0800 Subject: [PATCH] 更新密码策略功能 --- Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java | 96 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 76 insertions(+), 20 deletions(-) diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java index 9b0ada5..5138b90 100644 --- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java +++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java @@ -23,7 +23,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springblade.common.constant.CommonConstant; -import org.springblade.common.constant.TenantConstant; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; @@ -32,12 +31,12 @@ import org.springblade.core.tenant.BladeTenantProperties; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; -import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.*; import org.springblade.system.cache.DictCache; import org.springblade.system.cache.ParamCache; import org.springblade.system.cache.SysCache; +import org.springblade.system.entity.Strategy; import org.springblade.system.entity.Tenant; import org.springblade.system.enums.DictEnum; import org.springblade.system.feign.ISysClient; @@ -53,11 +52,9 @@ import org.springblade.system.user.wrapper.UserWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.DigestUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD; @@ -83,19 +80,7 @@ user.setTenantId(BladeConstant.ADMIN_TENANT_ID); } String tenantId = user.getTenantId(); - Tenant tenant = SysCache.getTenant(tenantId); - if (Func.isNotEmpty(tenant)) { - Integer accountNumber = tenant.getAccountNumber(); - if (tenantProperties.getLicense()) { - String licenseKey = tenant.getLicenseKey(); - String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY); - accountNumber = JsonUtil.parse(decrypt, Tenant.class).getAccountNumber(); - } - Long tenantCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId)); - if (accountNumber != null && accountNumber > 0 && accountNumber <= tenantCount) { - throw new ServiceException("褰撳墠绉熸埛宸插埌鏈�澶ц处鍙烽搴�!"); - } - } + //Tenant tenant = SysCache.getTenant(tenantId); if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } @@ -104,6 +89,28 @@ throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount())); } return save(user) && submitUserDept(user); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean submitList(List<User> users) { + Boolean flag = true; + for (User user : users){ + if (StringUtil.isBlank(user.getTenantId())) { + user.setTenantId(BladeConstant.ADMIN_TENANT_ID); + } + String tenantId = user.getTenantId(); + if (Func.isNotEmpty(user.getPassword())) { + user.setPassword(DigestUtil.encrypt(user.getPassword())); + } + Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount())); + if (userCount > 0L && Func.isEmpty(user.getId())) { + throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount())); + } + flag = save(user) && submitUserDept(user); + + } + return flag; } @Override @@ -286,6 +293,7 @@ @Override public boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1) { + String hex = DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes())); User user = getById(userId); if (!newPassword.equals(newPassword1)) { throw new ServiceException("璇疯緭鍏ユ纭殑纭瀵嗙爜!"); @@ -293,7 +301,21 @@ if (!user.getPassword().equals(DigestUtil.hex(oldPassword))) { throw new ServiceException("鍘熷瘑鐮佷笉姝g‘!"); } - return this.update(Wrappers.<User>update().lambda().set(User::getPassword, DigestUtil.hex(newPassword)).eq(User::getId, userId)); + //鑾峰彇鐢ㄦ埛閲囩敤鐨勫瘑鐮佺瓥鐣� + Strategy strategy = sysClient.getByUserId(userId).getData(); + String resException = "瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationIds()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠瀵嗙爜缁勫悎鏂瑰紡锛屼笖瀵嗙爜闀垮害蹇呴』鍦ㄣ��"+strategy.getMinPwdLen()+"-"+strategy.getMaxPwdLen()+"銆戣寖鍥村唴"; + //瀵嗙爜闀垮害鏍¢獙 + if(newPassword1.length() < strategy.getMinPwdLen() || newPassword1.length() > strategy.getMaxPwdLen()){ + throw new ServiceException(resException); + } + //鏌ヨ瀵嗙爜绛栫暐鍙栧�� + String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData(); + System.out.println("===============regex================"+regex); + regex = "^"+regex+"$"; + String result = RegexUtil.findResult(regex, newPassword); + System.out.println(result); + return this.update(Wrappers.<User>update().lambda().set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes()))).eq(User::getId, userId)); + //return true; } @Override @@ -430,4 +452,38 @@ return userVO; } + @Override + public Long checkRenAndExpr(Long userId) { + //鑾峰彇鍒板瘑鐮佷慨鏀规椂闂� + Date pwdUpdateTime = this.getOne(Wrappers.<User>query().eq("ID", userId)).getPwdUpdateTime(); + Long pwdupdateday = 0L; + if(!Func.isEmpty(pwdUpdateTime)){ + pwdupdateday = dateToDay(pwdUpdateTime); + } + Strategy strategy = sysClient.getByUserId(userId).getData(); + System.out.println("褰撳墠鏃堕棿=================="+dateToDay(new Date())); + System.out.println("瀵嗙爜淇敼鏃堕棿======================"+pwdupdateday); + System.out.println("鎻愰啋鏃堕棿======================"+strategy.getReminderTime()); + System.out.println("杩囨湡鏃堕棿======================="+strategy.getExpirationTime()); + //鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=0灏辨彁閱掑繀椤讳慨鏀瑰瘑鐮� + long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(pwdUpdateTime); + //蹇呴』鍘讳慨鏀瑰瘑鐮� + if(reminder<=0){ + return -1L; + } + //鎻愰啋鐢ㄦ埛杩樻湁澶氫箙杩囨湡 + if(reminder<=strategy.getReminderTime()){ + long res = (strategy.getReminderTime()+pwdupdateday)-dateToDay(new Date()); + return res; + } + //浠h〃姝e父鐘舵�佽繕鏈埌鎻愰啋涓庤繃鏈熸椂闂达紝鏃笉鎻愰啋涔熶笉瑕佹眰淇敼 + return 0L; + } + + private Long dateToDay(Date date){ + long time = date.getTime(); + return time/(1000 * 60 * 60 * 24); + } + + } -- Gitblit v1.9.3