From e405b861b9521f5ea38c5402203a5b05988f9de2 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 04 十二月 2024 10:47:05 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java | 266 +++------------------------------------------------- 1 files changed, 19 insertions(+), 247 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java similarity index 61% rename from Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java rename to Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java index 8bc2aa7..9e88c5c 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java @@ -1,21 +1,17 @@ package com.vci.web.service.impl; +import com.vci.bo.LoginResultBO; +import com.vci.constant.CacheNameConstant; import com.vci.corba.common.PLException; import com.vci.corba.framework.data.DeptInfo; import com.vci.corba.framework.data.LoginResult; import com.vci.corba.framework.data.LoginState; import com.vci.corba.framework.data.MachineInfo; -import com.vci.frameworkcore.ajaxTask.SmUserUnLockTask; -import com.vci.frameworkcore.ajaxTask.SmUserUnLockTaskManager; -import com.vci.frameworkcore.compatibility.ISmFunctionQueryService; -import com.vci.frameworkcore.compatibility.SmPwdStrategyQueryServiceI; -import com.vci.frameworkcore.compatibility.SmUserQueryServiceI; -import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum; -import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus; +import com.vci.dto.LoginUserDTO; +import com.vci.lcstatuspck.FrameworkDataLCStatus; import com.vci.pagemodel.SmFunctionVO; import com.vci.pagemodel.SmPasswordStrategyVO; import com.vci.pagemodel.SmUserVO; -import com.vci.frameworkcore.properties.VciSecurityManageProperties; import com.vci.starter.web.annotation.bus.VciLoginAfter; import com.vci.starter.web.annotation.bus.VciLogoutBefore; import com.vci.starter.web.annotation.bus.VciLogoutPlugin; @@ -25,15 +21,21 @@ import com.vci.starter.web.pagemodel.RequestClientInfo; import com.vci.starter.web.pagemodel.SessionInfo; import com.vci.starter.web.pagemodel.TokenVO; -import com.vci.starter.web.util.*; - -import com.vci.bo.LoginResultBO; -import com.vci.constant.CacheNameConstant; -import com.vci.dto.LoginUserDTO; -import com.vci.web.properties.WebProperties; import com.vci.starter.web.redis.RedisService; -import com.vci.web.service.LoginServiceI; -import com.vci.web.util.Func; +import com.vci.starter.web.util.ApplicationContextProvider; +import com.vci.starter.web.util.Lcm.Func; +import com.vci.starter.web.util.VciBaseUtil; +import com.vci.starter.web.util.VciDateUtil; +import com.vci.starter.web.util.WebThreadLocalUtil; +import com.vci.web.ajaxTask.SmUserUnLockTask; +import com.vci.web.ajaxTask.SmUserUnLockTaskManager; +import com.vci.web.enumpck.ResourceControlTypeEnum; +import com.vci.web.properties.VciSecurityManageProperties; +import com.vci.web.properties.WebProperties; +import com.vci.web.service.ISmFunctionQueryService; +import com.vci.web.service.OsLoginServiceI; +import com.vci.web.service.SmPwdStrategyQueryServiceI; +import com.vci.web.service.SmUserQueryServiceI; import com.vci.web.util.PlatformClientUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -55,7 +57,7 @@ * @date 2020/1/29 */ @Service -public class LoginServiceImpl implements LoginServiceI { +public class OsLoginServiceImpl implements OsLoginServiceI { /** * 鏃ュ織 @@ -286,223 +288,6 @@ return loginResult; } - /** - * 鐧诲綍_搴熷純鏂规硶锛屼富瑕佺敤鏉ュ浠� - * @param userDTO 鐢ㄦ埛鐨勬暟鎹紶杈撳璞� - * @param clientInfo 瀹㈡埛绔殑淇℃伅 - * @param checkPassword 鏄惁鏍¢獙瀵嗙爜 - * @return 鎵ц缁撴灉 - * @throws VciBaseException 鍙傛暟閿欒锛岀敤鎴蜂笉鑳界櫥褰曠瓑浼氭姏鍑哄紓甯� - */ - private LoginResultBO login_old(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword/*鍗曠偣鐧诲綍涓嶉渶瑕佹牎楠屽瘑鐮�*/) throws VciBaseException, PLException { - LoginResultBO loginResult = new LoginResultBO(); - loginResult.setSuccess(false); - - //1.鍒ゆ柇鐢ㄦ埛鐨勫熀鏈俊鎭� - VciBaseUtil.alertNotNull(userDTO, "鐧诲綍淇℃伅", userDTO.getUserId(), "鐢ㄦ埛璐﹀彿"); - if (checkPassword) { - VciBaseUtil.alertNotNull(userDTO.getPassword(), "鐧诲綍瀵嗙爜"); - } - //2銆佸垽鏂崟璁惧鐧诲綍,鏄惁宸茬粡鐧诲綍浜� - String userIdTokenKey = CacheNameConstant.cacheKey(CacheNameConstant.USERID_TOKEN_KEY, userDTO.getUserId().trim()); - if(redisService.hasKey(userIdTokenKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){ - loginResult.setFailCode(USER_IS_LOGINED); - loginResult.setFailMsg("褰撳墠鐢ㄦ埛宸茬粡鍦ㄥ叾浠栧湴鏂圭櫥褰曪紒"); - return loginResult; - } - //璇存槑宸茬粡鐧诲綍浜嗭紝閭e簲璇ュ彇娑堝師鏉ョ殑鐧诲綍 - if (redisService.hasKey(userIdTokenKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) { - String tokenKey = redisService.getCacheObject(userIdTokenKey); - redisService.deleteObject(tokenKey); - redisService.deleteObject(userIdTokenKey); - } - - //3.鑾峰彇鐢ㄦ埛鐨勫璞★紙瀵硅薄涓寘鍚鑹查儴闂ㄨ繕鏈夊瘑鐮佺瓥鐣ヤ俊鎭級 - SmUserVO user = getUserByUserId(userDTO.getUserId().trim()); - if (user == null || StringUtils.isBlank(user.getOid())) { - loginResult.setFailCode(USER_NOT_FOUND); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); - return loginResult; - } - - //3銆佸垽鏂瘑鐮佹槸鍚︽纭� - if (checkPassword) { - boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getName()); - if (!passwordIsEqual) { - if (logger.isDebugEnabled()) { - logger.debug("{}瀵嗙爜涓嶆纭�", user.getId()); - } - } - } - - //4銆佽皟鐢ㄥ钩鍙扮櫥褰曟帴鍙o紝杩涜鐧诲綍 - MachineInfo machine = getMachieInfo(clientInfo); - machine.country = clientInfo.getCountry(); - machine.language = clientInfo.getLanguage(); - machine.osUser = clientInfo.getOsUser(); - machine.machine = clientInfo.getMachine(); - String token = null; - try { - LoginResult chkRes = platformClientUtil.getFrameworkService().checkLogin(userDTO.getUserId(),userDTO.getPassword(), machine); - loginResult.setFailCode(getErrorCode(chkRes)); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), String.valueOf(chkRes.auxInfo)}); - if(chkRes.state == LoginState.Error || chkRes.state == LoginState.Locked || chkRes.state == LoginState.Freeze){ - return loginResult; - } - token = chkRes.token; - } catch (Exception e) { - loginResult.setFailCode(SYSTEM_ERROR); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); - return loginResult; - } - if(StringUtils.isBlank(token)){ - loginResult.setFailMsg(TOKEN_EMPTY); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); - return loginResult; - } - - //濡傛灉鐢ㄦ埛宸茬粡琚仠鐢ㄥ拰閿佸畾锛屼笉鑳界櫥褰� - if (FrameworkDataLCStatus.DISABLED.getValue().equals(user.getLcStatus())) { - loginResult.setFailCode(USER_IS_DISABLED); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); - return loginResult; - } - if (userQueryService.checkUserLock(user, user.getPwdWrongCount())) { - loginResult.setFailCode(USER_IS_LOCK); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); - return loginResult; - } - - //濡傛灉鐢ㄦ埛鐨勫け鏁堟棩鏈熷凡缁忚秴杩囦簡褰撳墠鏃堕棿锛屼笉鑳界櫥褰� - //鍙湁鏂板钩鍙扮殑鐢ㄦ埛鎵嶅垽鏂け鏁� - /*if (user.getDisabledate() != null) { - //2021鐗堟湰鎵嶆湁杩欎釜灞炴�х殑鍊硷紝褰撳墠杩欎釜娌℃湁杩欎釜鍊� - Date disableDate = VciDateUtil.addOrSubDate(user.getDisabledate(), Calendar.DATE, 1); - if (disableDate != null && disableDate.getTime() < System.currentTimeMillis()) { - loginResult.setFailCode(USER_MORE_THAN_DISABLE_DATE); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); - return loginResult; - } - }*/ - //褰撳墠鐢ㄦ埛娌℃湁閰嶇疆灏辨煡璇㈤粯璁ょ殑瀵嗙爜绛栫暐 - SmPasswordStrategyVO passwordStrategyVO = pwdStrategyQueryService.getPasswordStrategyVOByUserOid(user.getOid()); - if (checkPassword) { - //鍓嶇闇�瑕佸厛md5涓�娆★紝鐒跺悗鍚庡彴鍐峂D5涓�娆★紝 - if (logger.isDebugEnabled()) { - logger.debug("{}瀵嗙爜涓嶆纭�", user.getId()); - } - //鍙鏁版嵁娌℃湁闂灏变笉瀛樺湪瀵嗙爜绛栫暐涓虹┖鐨勬儏鍐� - if (passwordStrategyVO == null) { - //鍙兘鏁版嵁闂娌℃湁璁剧疆瀵嗙爜绛栫暐 - passwordStrategyVO = new SmPasswordStrategyVO(); - passwordStrategyVO.setRetryTime(6); - passwordStrategyVO.setLockTime(30); - } - //鍒ゆ柇瀵嗙爜閿欒娆℃暟鏄惁杈惧埌涓婇檺 - if (passwordStrategyVO.getRetryTime() <= (user.getPwdWrongCount() + 1)) { - user.setLockFlag(true); - updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1); - addUserToUnLock(userDTO.getUserId(), passwordStrategyVO.getLockTime()); - //updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1); - loginResult.setFailCode(USER_PWD_LOCK); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), passwordStrategyVO.getLockTime() + ""}); - return loginResult; - } else { - //杩樻病鏈夊埌閿佸畾鐨勬鏁� - updateUserPwdWrongCount(user.getOid(), user.getPwdWrongCount() + 1); - //5, 杩欐槸绗竴娆¢敊璇紝鍓╀笅鐨勬槸 5- 锛�0+1锛� - loginResult.setFailCode(USER_PWD_NOT_EQUAL); - loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), (passwordStrategyVO.getRetryTime() - (user.getPwdWrongCount() + 1)) + ""}); - return loginResult; - } - } - - //妫�鏌ユ槸鍚﹁淇敼瀵嗙爜 - if (!clientInfo.isSso() && checkPassword) { - //鏈�鍚庝慨鏀规椂闂� + 澶辨晥鏃堕棿锛屽ぇ浜庣瓑浜庡綋鍓嶆棩鏈燂紝鍒欓渶瑕侀┈涓婁慨鏀瑰瘑鐮� - Date currentDay = null; - try { - currentDay = VciDateUtil.getNow(VciDateUtil.DateFormat); - } catch (Throwable e) { - if (logger.isErrorEnabled()) { - logger.error("鑾峰彇褰撳墠鏃ユ湡", e); - } - } - if (currentDay != null && passwordStrategyVO != null && passwordStrategyVO.getValidDay() != null) { - Date inValidDay = null; - if (user.getLastModifyPasswordTime() == null) { - //浠庢潵娌℃湁鐧诲綍杩� - loginResult.setMustChangePassword(true); - } else { - inValidDay = VciDateUtil.addOrSubDate(user.getLastModifyPasswordTime(), Calendar.DATE, passwordStrategyVO.getValidDay()); - if (inValidDay.getTime() <= (currentDay).getTime()) { - loginResult.setMustChangePassword(true); - } - } - if (!loginResult.isMustChangePassword()) { - if (VciDateUtil.addOrSubDate(inValidDay, Calendar.DATE, -(passwordStrategyVO.getRemindDay())).getTime() - <= (currentDay).getTime()) { - //鎮ㄧ殑瀵嗙爜杩樻湁{0}澶╄繃鏈燂紝璇峰強鏃朵慨鏀瑰瘑鐮� - long remainDay = VciDateUtil.getDaySub(inValidDay, currentDay); - loginResult.setPasswordInfo(MessageFormat.format(PASSWORD_REMAIN_DAY, new String[]{String.valueOf(remainDay)})); - } - } - } - } - - //璇存槑瀵嗙爜姝g‘鐨� - if (logger.isDebugEnabled()) { - logger.debug("{}鐨勫瘑鐮佹纭�", user.getId()); - } - user.setLastLoginTime(new Date()); - user.setPwdWrongCount(0); - - SessionInfo sessionInfo = new SessionInfo(); - sessionInfo.setToken(token); - - //鍒濆鍖栧钩鍙扮殑token - sessionForLogin.initInvocationInfo(sessionInfo); - - //鎷疯礉鐢ㄦ埛鐨勬柊鍒皊ession浼氳瘽涓� - copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode()); - //鎷疯礉璇锋眰淇℃伅鍒皊ession浼氳瘽涓� - copyRequest2SessionInfo(clientInfo, sessionInfo); - - //鑾峰彇浜哄憳鎵�灞炵殑閮ㄩ棬淇℃伅 - try { - DeptInfo deptInfo = platformClientUtil.getFrameworkService().fetchDeptByUserId(user.getOid()); - sessionInfo.setDeptOid(deptInfo.id); - sessionInfo.setDeptName(deptInfo.name); - sessionInfo.setDeptNum(deptInfo.num); - } catch (PLException e) { - throw new VciBaseException("鑾峰彇鐢ㄦ埛鎵�灞為儴闂ㄥけ璐�:"+e.getMessage()); - } - - /** //鏌ヨ鎵�鏈夌殑瑙掕壊 - List<SmRoleVO> roleVOList = roleQueryService.listRoleByUserOid(user.getOid(), null); - if (!CollectionUtils.isEmpty(roleVOList)) { - Map<String, String> roleOidNameMap = roleVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t.getName())); - sessionInfo.setRolesName(roleOidNameMap); - } else { - sessionInfo.setRolesName(new HashMap()); - } - //鏌ヨ鎵�鏈夌殑鏉冮檺 - List<SmFunctionVO> functionVOList = functionQueryService.listFunctionByUserOid(user.getOid(), null, ResourceControlTypeEnum.BS); - if (!CollectionUtils.isEmpty(functionVOList)) { - List<String> functionOidList = functionVOList.stream().map(s -> s.getOid()).collect(Collectors.toList()); - sessionInfo.setFunctionOids(functionOidList); - } else { - sessionInfo.setFunctionOids(new ArrayList()); - }*/ - - //娣诲姞鍒颁細璇濅俊鎭� - TokenVO tokenVO = saveSessionInfo(sessionInfo); - loginResult.setTokenVO(tokenVO); - - loginResult.setSuccess(true); - return loginResult; - } - private MachineInfo getMachieInfo(RequestClientInfo clientInfo) { MachineInfo machine = new MachineInfo(); machine.country = clientInfo.getCountry(); @@ -519,19 +304,6 @@ */ private SmUserVO getUserByUserId(String userId) { return userQueryService.getUserByUserId(userId); - } - - /** - * 鍗曠偣鐧诲綍 - * - * @param userDTO 鐧诲綍淇℃伅 - * @param clientInfo 璇锋眰鐨勫鎴风鐨勪俊鎭� - * @return 鐧诲綍鐨勭粨鏋滃璞� - * @throws VciBaseException 鐧诲綍澶辫触鐨勬椂鍊欐姏鍑哄紓甯� - */ - @Override - public LoginResultBO singleLogin(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws Exception { - return login(userDTO,clientInfo,false); } /** -- Gitblit v1.9.3