From 28ca3d9f9e6e7eeeb7a7f2a7f50012350f3934c3 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 13 十一月 2024 18:07:11 +0800 Subject: [PATCH] 优化业务数据的查询接口;修改业务数据保存和编辑接口没有保存基础默认属性问题。 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java | 368 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 282 insertions(+), 86 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/LoginServiceImpl.java index 5d8706a..b4be78a 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/LoginServiceImpl.java @@ -1,31 +1,39 @@ package com.vci.web.service.impl; -import com.vci.client.logon.base.LogonHandler; +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.SmRoleQueryServiceI; +import com.vci.frameworkcore.compatibility.SmPwdStrategyQueryServiceI; import com.vci.frameworkcore.compatibility.SmUserQueryServiceI; -import com.vci.frameworkcore.pagemodel.SmUserVO; +import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum; +import com.vci.frameworkcore.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; -import com.vci.starter.web.constant.TokenKeyConstant; +import com.vci.starter.web.constant.VConstant; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.interceptor.VciSessionForLoginI; 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.web.bo.LoginResultBO; -import com.vci.web.constant.CacheNameConstant; -import com.vci.web.dto.LoginUserDTO; + +import com.vci.bo.LoginResultBO; +import com.vci.constant.CacheNameConstant; +import com.vci.dto.LoginUserDTO; import com.vci.web.properties.WebProperties; -import com.vci.web.redis.RedisService; +import com.vci.starter.web.redis.RedisService; import com.vci.web.service.LoginServiceI; +import com.vci.web.util.Func; import com.vci.web.util.PlatformClientUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -35,13 +43,11 @@ import javax.annotation.Resource; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; +import java.text.MessageFormat; +import java.util.*; +import java.util.stream.Collectors; -import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*; +import static com.vci.constant.FrameWorkBusLangCodeConstant.*; /** * 鐧诲綍鐨勬湇鍔� @@ -81,16 +87,28 @@ private SmUserQueryServiceI userQueryService; /** - * 瑙掕壊鐨勬煡璇㈡湇鍔★紝鍙互鍏煎鑰佸钩鍙� + * 瀵嗙爜绛栫暐鏌ヨ鏈嶅姟 */ @Resource - private SmRoleQueryServiceI roleQueryService; + private SmPwdStrategyQueryServiceI pwdStrategyQueryService; + + /** + * 鍔熻兘鑿滃崟鐨勬煡璇㈡湇鍔� + */ + @Resource + private ISmFunctionQueryService functionQueryService; + + /** + * 瑙掕壊鐨勬煡璇㈡湇鍔★紝鍙互鍏煎鑰佸钩鍙� + */ + //@Resource + //private SmRoleQueryServiceI roleQueryService; /** * 鏉冮檺鐨勬煡璇㈡湇鍔★紝鍙互鍏煎鑰佸钩鍙� */ - @Resource - private ISmFunctionQueryService functionQueryService; + //@Resource + //private ISmFunctionQueryService functionQueryService; /** * redis鏈嶅姟 @@ -117,7 +135,7 @@ * @throws VciBaseException 鐧诲綍鍙戠敓寮傚父鐨勬椂鍊欏嚭鐜颁簡閿欒 */ @Override - public LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws VciBaseException { + public LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws PLException { return login(userDTO,clientInfo,true); } @@ -129,16 +147,162 @@ * @return 鎵ц缁撴灉 * @throws VciBaseException 鍙傛暟閿欒锛岀敤鎴蜂笉鑳界櫥褰曠瓑浼氭姏鍑哄紓甯� */ - private LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword) throws VciBaseException { + private LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword/*鍗曠偣鐧诲綍涓嶉渶瑕佹牎楠屽瘑鐮�*/) throws VciBaseException { 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); + redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY); + } - //闇�瑕佺湅鐪嬫槸鍚﹀凡缁忕櫥褰曚簡 + //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; + } + + //4銆佸垽鏂瘑鐮佹槸鍚︽纭紙骞冲彴鐨刢heckLogin鏂规硶濂藉儚鏈夊瀵嗙爜杩涜姣斿鐨勬柟娉曪級 + /*if (checkPassword) { + boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid()); + if (!passwordIsEqual) { + if (logger.isDebugEnabled()) { + logger.debug("{}瀵嗙爜涓嶆纭�", user.getId()); + } + } + }*/ + + //5銆佽皟鐢ㄥ钩鍙扮櫥褰曟帴鍙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 { + //鍓嶇浼犺繃鏉ョ殑瀵嗙爜鏄粡杩囧姞瀵嗕紶杈撶殑锛屾墍浠ラ渶瑕佹寜鐓х害瀹氳В瀵嗭紝鍐嶄紶缁欏钩鍙拌繘琛屾瘮瀵� + userDTO.setPassword(Func.decryptAes(userDTO.getPassword(),"daliantan0v0vcip")); + LoginResult chkRes = platformClientUtil.getFrameworkService().checkLogin(userDTO.getUserId(),userDTO.getPassword(), machine); + loginResult.setFailCode(getErrorCode(chkRes)); + //loginResult.setFailMsgArray(new String[]{userDTO.getUserId(), String.valueOf(chkRes.auxInfo)}); + loginResult.setFailMsgArray(new String[]{String.valueOf(chkRes.auxInfo)}); + //鏍规嵁涓嶅悓鐘舵�佸鐞嗗钩鍙拌繑鍥炵殑淇℃伅 + if(chkRes.state.equals(LoginState.Error) || chkRes.state.equals(LoginState.Locked) || chkRes.state.equals(LoginState.Freeze)){ + return loginResult; + } + //鍏充簬瀵嗙爜绛栫暐鐩稿叧鐨勮繑鍥炰俊鎭鐞� + if(chkRes.state.equals(LoginState.InitialPW)){ + loginResult.setMustChangePassword(true); + loginResult.setPasswordInfo("鎮ㄧ殑瀵嗙爜鏄鐞嗗憳鍒濆鐨勫瘑鐮侊紝闇�瑕佷慨鏀瑰瘑鐮佹墠鑳借繘琛屽叾瀹冩搷浣�!"); + return loginResult; + }else if(chkRes.state.equals(LoginState.PWExpired)){ + //闇�瑕佺珛鍗充慨鏀瑰瘑鐮� + loginResult.setMustChangePassword(true); + loginResult.setPasswordInfo("鎮ㄧ殑瀵嗙爜宸茬粡杩囨湡,璇疯繘琛屼慨鏀癸紒"); + return loginResult; + }else if(chkRes.state.equals(LoginState.PWPolicyUpdated)){ + //绛栫暐淇敼锛岀洿鎺ヨ繑鍥為檺鍒剁敤鎴峰悗缁搷浣� + loginResult.setMustChangePassword(true); + loginResult.setPasswordInfo("鎮ㄧ殑瀵嗙爜绛栫暐宸茬粡淇敼锛岄渶瑕佷慨鏀瑰瘑鐮佹墠鑳借繘琛屽叾瀹冩搷浣�!"); + return loginResult; + }else if(chkRes.state.equals(LoginState.PWWillExpire)){ + loginResult.setPasswordInfo(String.format("鎮ㄧ殑瀵嗙爜鏈夋晥鏈熻繕鏈�%s澶�,璇锋敞鎰忎慨鏀�!",chkRes.auxInfo)); + } + 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; + } + //6銆佺櫥褰曟垚鍔熶箣鍚庨渶瑕佸鐞嗙殑閫昏緫 + user.setLastLoginTime(new Date());//鏈�鍚庣櫥褰曟椂闂� + user.setPwdWrongCount(0);//瀵嗙爜閿欒娆℃暟娓�0 + //澶勭悊鐢ㄦ埛鐧诲綍鎴愬姛鐨剆ession + SessionInfo sessionInfo = new SessionInfo(); + sessionInfo.setToken(token); + //鍒濆鍖栧钩鍙扮殑token + sessionForLogin.initInvocationInfo(sessionInfo); + //璁板綍褰撳墠鐧诲綍浜烘暟鐨勬�绘暟 + redisService.increOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY); + //鎷疯礉鐢ㄦ埛鍒版柊鐨剆ession浼氳瘽涓� + copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode()); + //鎷疯礉璇锋眰淇℃伅鍒皊ession浼氳瘽涓� + copyRequest2SessionInfo(clientInfo, sessionInfo); + + //鏌ョ湅浜嗗钩鍙扮殑鐧诲綍鏂规硶鍏跺疄鏄湁澶勭悊閮ㄩ棬瑙掕壊绛夌浉鍏充俊鎭殑浣嗘槸涓嶇煡閬撲负浠�涔堟棤娉曡幏鍙栧埌 + //閮ㄩ棬淇℃伅澶勭悊 + sessionInfo.setDeptOid(user.getPkDepartment()); + sessionInfo.setDeptName(user.getPkDepartmentName()); + sessionInfo.setDeptNum(user.getPkDepartmentNum()); + //瑙掕壊淇℃伅澶勭悊 + String roleOids = user.getPkPerson(); + String roleNames = user.getPkPersonName(); + HashMap<String, String> roleOidNameMap = new HashMap<>(); + if(Func.isNotBlank(roleOids) && Func.isNotBlank(roleOids)){ + String[] oids = roleOids.split(","); + String[] names = roleNames.split(","); + for (int i = 0; i < oids.length; i++) { + roleOidNameMap.put(oids[i],names[i]); + } + } + sessionInfo.setRolesName(roleOidNameMap); + + //鏌ヨ鎵�鏈夌殑鏉冮檺 + 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; + } + + /** + * 鐧诲綍_搴熷純鏂规硶锛屼富瑕佺敤鏉ュ浠� + * @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); @@ -152,7 +316,7 @@ redisService.deleteObject(userIdTokenKey); } - //2.鑾峰彇鐢ㄦ埛鐨勫璞�. + //3.鑾峰彇鐢ㄦ埛鐨勫璞★紙瀵硅薄涓寘鍚鑹查儴闂ㄨ繕鏈夊瘑鐮佺瓥鐣ヤ俊鎭級 SmUserVO user = getUserByUserId(userDTO.getUserId().trim()); if (user == null || StringUtils.isBlank(user.getOid())) { loginResult.setFailCode(USER_NOT_FOUND); @@ -162,7 +326,7 @@ //3銆佸垽鏂瘑鐮佹槸鍚︽纭� if (checkPassword) { - boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid()); + boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getName()); if (!passwordIsEqual) { if (logger.isDebugEnabled()) { logger.debug("{}瀵嗙爜涓嶆纭�", user.getId()); @@ -171,24 +335,33 @@ } //4銆佽皟鐢ㄥ钩鍙扮櫥褰曟帴鍙o紝杩涜鐧诲綍 - LogonHandler handler = new LogonHandler(); + 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 = handler.checkLogin(userDTO.getUserId(), userDTO.getPassword()); + 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())) { + if (FrameworkDataLCStatus.DISABLED.getValue().equals(user.getLcStatus())) { loginResult.setFailCode(USER_IS_DISABLED); loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); return loginResult; @@ -198,7 +371,10 @@ loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); return loginResult; } - if (user.getDisabledate() != null) { + + //濡傛灉鐢ㄦ埛鐨勫け鏁堟棩鏈熷凡缁忚秴杩囦簡褰撳墠鏃堕棿锛屼笉鑳界櫥褰� + //鍙湁鏂板钩鍙扮殑鐢ㄦ埛鎵嶅垽鏂け鏁� + /*if (user.getDisabledate() != null) { //2021鐗堟湰鎵嶆湁杩欎釜灞炴�х殑鍊硷紝褰撳墠杩欎釜娌℃湁杩欎釜鍊� Date disableDate = VciDateUtil.addOrSubDate(user.getDisabledate(), Calendar.DATE, 1); if (disableDate != null && disableDate.getTime() < System.currentTimeMillis()) { @@ -206,45 +382,43 @@ loginResult.setFailMsgArray(new String[]{userDTO.getUserId()}); return loginResult; } - } - - SmPasswordStrategyVO passwordStrategyVO = userQueryService.getPasswordStrategyVOByUserOid(user.getOid()); + }*/ + //褰撳墠鐢ㄦ埛娌℃湁閰嶇疆灏辨煡璇㈤粯璁ょ殑瀵嗙爜绛栫暐 + SmPasswordStrategyVO passwordStrategyVO = pwdStrategyQueryService.getPasswordStrategyVOByUserOid(user.getOid()); if (checkPassword) { - boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid()); - //3.鍒ゆ柇鐢ㄦ埛鐨勫瘑鐮佹槸鍚︽纭� - if (!passwordIsEqual) { - //鍓嶇闇�瑕佸厛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; - } + //鍓嶇闇�瑕佸厛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); @@ -256,7 +430,7 @@ 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()); @@ -273,7 +447,7 @@ } } } - }*/ + } //璇存槑瀵嗙爜姝g‘鐨� if (logger.isDebugEnabled()) { @@ -283,36 +457,58 @@ user.setPwdWrongCount(0); SessionInfo sessionInfo = new SessionInfo(); + sessionInfo.setToken(token); + + //鍒濆鍖栧钩鍙扮殑token + sessionForLogin.initInvocationInfo(sessionInfo); + //鎷疯礉鐢ㄦ埛鐨勬柊鍒皊ession浼氳瘽涓� copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode()); //鎷疯礉璇锋眰淇℃伅鍒皊ession浼氳瘽涓� copyRequest2SessionInfo(clientInfo, sessionInfo); - /** //鏌ヨ鎵�鏈夌殑瑙掕壊 - 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()); + //鑾峰彇浜哄憳鎵�灞炵殑閮ㄩ棬淇℃伅 + 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<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()); - }*/ - loginResult.setSuccess(true); - sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId())); + /** //鏌ヨ鎵�鏈夌殑瑙掕壊 + 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(); + machine.language = clientInfo.getLanguage(); + machine.osUser = clientInfo.getOsUser(); + machine.machine = clientInfo.getMachine(); + return machine; } /** @@ -324,7 +520,6 @@ return userQueryService.getUserByUserId(userId); } - /** * 鍗曠偣鐧诲綍 * @@ -334,7 +529,7 @@ * @throws VciBaseException 鐧诲綍澶辫触鐨勬椂鍊欐姏鍑哄紓甯� */ @Override - public LoginResultBO singleLogin(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws VciBaseException { + public LoginResultBO singleLogin(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws PLException { return login(userDTO,clientInfo,false); } @@ -367,6 +562,8 @@ } }); } + //娓呴櫎瀛樺綋鍓嶇櫥褰曠殑鐢ㄦ埛锛堟�绘暟-1锛� + redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY); sessionForLogin.logout(userToken); if(!CollectionUtils.isEmpty(logoutpluginBeanMap)){ logoutpluginBeanMap.forEach((k,v) -> { @@ -389,8 +586,6 @@ } } - - /** * 淇濆瓨浼氳瘽淇℃伅 * @param sessionInfo 浼氳瘽淇℃伅 @@ -399,6 +594,7 @@ if(sessionForLogin == null){ throw new VciBaseException("娌℃湁閰嶇疆浼氳瘽瀛樺偍鐨勬湇鍔�"); } + WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo); return sessionForLogin.createToken(sessionInfo); } @@ -494,7 +690,7 @@ switch(chkRes.state.value()) { case 0: - return ""; + return UNKNOWN; case 1: return LOGIN_SUCCESS; case 10: -- Gitblit v1.9.3