From 82a410d9ec7a5d15eed27e9990cff371feab43a1 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期一, 27 三月 2023 18:25:38 +0800 Subject: [PATCH] 新增编码规则服务 --- Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java | 90 +++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 83 insertions(+), 7 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 7465d53..96f2490 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 @@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.springblade.common.constant.CommonConstant; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; @@ -36,6 +36,7 @@ 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; @@ -49,13 +50,12 @@ import org.springblade.system.user.service.IUserService; import org.springblade.system.user.vo.UserVO; import org.springblade.system.user.wrapper.UserWrapper; +import org.springframework.beans.factory.annotation.Value; 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; @@ -65,7 +65,7 @@ * @author Chill */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserService { private static final String GUEST_NAME = "guest"; @@ -73,6 +73,10 @@ private final IUserOauthService userOauthService; private final ISysClient sysClient; private final BladeTenantProperties tenantProperties; + //鎷垮埌閰嶇疆鐨勮秴绠d + @Value("${user-info.id}") + private String adminUserId; + @Override @Transactional(rollbackFor = Exception.class) @@ -301,7 +305,40 @@ 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(); + //瀵嗙爜闀垮害鏍¢獙 + if(newPassword1.length() < strategy.getMinPwdLen() || newPassword1.length() > strategy.getMaxPwdLen()){ + throw new ServiceException("瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠瀵嗙爜缁勫悎鏂瑰紡锛屼笖瀵嗙爜闀垮害蹇呴』鍦ㄣ��"+strategy.getMinPwdLen()+"-"+strategy.getMaxPwdLen()+"銆戣寖鍥村唴"); + } + List<String> regexs = sysClient.getRegexByList(Arrays.asList(strategy.getCombinationIds().split(","))).getData(); + //鍒ゆ柇鏄惁婊¤冻缁勫悎鏂瑰紡涓殑蹇呭~绉嶇被鏁� + int reqType = 0; + for (int i = 0; i < regexs.size(); i++) { + if(reqType>=strategy.getRequiredType()){ + break; + } + if(!Func.isEmpty(RegexUtil.findResult(regexs.get(i),newPassword1))){ + reqType++; + } + } + String resException = "瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠绫诲瀷锛岃閲嶆柊杈撳叆瀵嗙爜锛�"; + if(reqType<strategy.getRequiredType()){ + throw new ServiceException(resException); + } + // 鏄惁灞炰簬缁勫悎鏂瑰紡涓殑绫诲瀷 + String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData(); + regex = "^"+regex+"{"+strategy.getRequiredType()+",}$"; + boolean result = RegexUtil.find(regex, newPassword1); + if(!result){ + throw new ServiceException(resException); + } + //淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�,瀵嗙爜淇敼鏃堕棿 + return this.update(Wrappers.<User>update().lambda() + .set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes()))) + .set(User::getStrategyUpdateStatus,CommonConstant.TOP_PARENT_ID) + .set(User::getPwdUpdateTime,new Date()) + .eq(User::getId, userId)); } @Override @@ -438,4 +475,43 @@ return userVO; } + @Override + public Long checkRenAndExpr(Long userId) { + //瓒呯骇绠$悊鍛樼洿鎺ヨ繑鍥炰笉闇�瑕佹彁閱掑瘑鐮佷慨鏀� + if(adminUserId.equals(userId)){ + return 0L; + } + //鑾峰彇鍒板瘑鐮佷慨鏀规椂闂� + 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(); + //鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=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; + } + + /** + * 鏃堕棿鏍煎紡杞ぉ + * @param date + * @return + */ + private Long dateToDay(Date date){ + long time = date.getTime(); + return time/(1000 * 60 * 60 * 24); + } + + } -- Gitblit v1.9.3