From 3f2e126dd9ea3c47fa473b18d9fd890763918002 Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期五, 22 十一月 2024 15:25:21 +0800
Subject: [PATCH] 首页配置
---
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java | 472 +++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 297 insertions(+), 175 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 17aa5b1..8bc2aa7 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,34 +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.ApplicationContextProvider;
-import com.vci.starter.web.util.JwtUtils;
-import com.vci.starter.web.util.Md5;
-import com.vci.starter.web.util.VciBaseUtil;
-import com.vci.web.bo.LoginResultBO;
-import com.vci.web.constant.CacheNameConstant;
-import com.vci.web.dto.LoginUserDTO;
+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.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;
@@ -38,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.*;
/**
* 鐧诲綍鐨勬湇鍔�
@@ -84,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鏈嶅姟
@@ -120,7 +135,7 @@
* @throws VciBaseException 鐧诲綍鍙戠敓寮傚父鐨勬椂鍊欏嚭鐜颁簡閿欒
*/
@Override
- public LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws VciBaseException {
+ public LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws Exception {
return login(userDTO,clientInfo,true);
}
@@ -132,28 +147,177 @@
* @return 鎵ц缁撴灉
* @throws VciBaseException 鍙傛暟閿欒锛岀敤鎴蜂笉鑳界櫥褰曠瓑浼氭姏鍑哄紓甯�
*/
- private LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword) throws VciBaseException {
+ private LoginResultBO login(LoginUserDTO userDTO, RequestClientInfo clientInfo, boolean checkPassword/*鍗曠偣鐧诲綍涓嶉渶瑕佹牎楠屽瘑鐮�*/) throws Exception {
LoginResultBO loginResult = new LoginResultBO();
loginResult.setSuccess(false);
+
//1.鍒ゆ柇鐢ㄦ埛鐨勫熀鏈俊鎭�
VciBaseUtil.alertNotNull(userDTO, "鐧诲綍淇℃伅", userDTO.getUserId(), "鐢ㄦ埛璐﹀彿");
if (checkPassword) {
VciBaseUtil.alertNotNull(userDTO.getPassword(), "鐧诲綍瀵嗙爜");
}
-
- //闇�瑕佺湅鐪嬫槸鍚﹀凡缁忕櫥褰曚簡
- String loginKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_LOGIN, userDTO.getUserId());
- if(redisService.hasKey(loginKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){
+ //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(loginKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) {
- redisService.deleteObject(CacheNameConstant.VCI_USER_LOGIN);
+ 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);
}
- //2.鑾峰彇鐢ㄦ埛鐨勫璞�.
+ //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
+ platformClientUtil.getFrameworkService().updateLogonInfo(user.getOid(),true);
+ //澶勭悊鐢ㄦ埛鐧诲綍鎴愬姛鐨剆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);
+ 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);
@@ -163,7 +327,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());
@@ -172,24 +336,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;
@@ -199,7 +372,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()) {
@@ -207,45 +383,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);
@@ -257,7 +431,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());
@@ -274,7 +448,7 @@
}
}
}
- }*/
+ }
//璇存槑瀵嗙爜姝g‘鐨�
if (logger.isDebugEnabled()) {
@@ -284,36 +458,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()));
- loginResult.setSessionInfo(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());
+ }
+ //鏌ヨ鎵�鏈夌殑鏉冮檺
+ 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());
+ }*/
//娣诲姞鍒颁細璇濅俊鎭�
- saveSessionInfo(sessionInfo);
+ 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;
}
/**
@@ -322,16 +518,8 @@
* @Return com.vci.frameworkcore.pagemodel.SmUserVO
*/
private SmUserVO getUserByUserId(String userId) {
- String userKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER,userId);
- String userOid = redisService.getCacheObject(userKey);
- String oidKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_OID, userOid);
- SmUserVO userVO = redisService.getCacheObject(oidKey);
- if(userVO == null || StringUtils.isBlank(userVO.getOid())){
- userVO = userQueryService.getUserByUserId(userId);
- }
- return userVO;
+ return userQueryService.getUserByUserId(userId);
}
-
/**
* 鍗曠偣鐧诲綍
@@ -342,7 +530,7 @@
* @throws VciBaseException 鐧诲綍澶辫触鐨勬椂鍊欐姏鍑哄紓甯�
*/
@Override
- public LoginResultBO singleLogin(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws VciBaseException {
+ public LoginResultBO singleLogin(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws Exception {
return login(userDTO,clientInfo,false);
}
@@ -375,6 +563,8 @@
}
});
}
+ //娓呴櫎瀛樺綋鍓嶇櫥褰曠殑鐢ㄦ埛锛堟�绘暟-1锛�
+ redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY);
sessionForLogin.logout(userToken);
if(!CollectionUtils.isEmpty(logoutpluginBeanMap)){
logoutpluginBeanMap.forEach((k,v) -> {
@@ -397,22 +587,16 @@
}
}
-
-
/**
* 淇濆瓨浼氳瘽淇℃伅
* @param sessionInfo 浼氳瘽淇℃伅
*/
- private void saveSessionInfo(SessionInfo sessionInfo){
+ private TokenVO saveSessionInfo(SessionInfo sessionInfo){
if(sessionForLogin == null){
throw new VciBaseException("娌℃湁閰嶇疆浼氳瘽瀛樺偍鐨勬湇鍔�");
}
- //灏嗘潈闄愪俊鎭紝鏀惧叆redis缂撳瓨涓�備互闃叉session涓殑淇℃伅杩囧锛屽瓨鍏ユ暟鎹簱涓嚭鐜伴敊璇�
- redisService.setCacheList(sessionInfo.getToken(),sessionInfo.getFunctionOids());
- redisService.expire(sessionInfo.getToken(), 1, TimeUnit.HOURS);
-
- sessionInfo.setFunctionOids(new ArrayList<>());
- sessionForLogin.saveSessionInfo(sessionInfo);
+ WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo);
+ return sessionForLogin.createToken(sessionInfo);
}
/**
@@ -462,6 +646,7 @@
sessionInfo.setRtxNo(user.getRtxNo());
sessionInfo.setIMId(user.getIMNo());
sessionInfo.setPortalId(user.getId());
+ sessionInfo.setLastLoginTime(user.getLastLoginTime()!=null?user.getLastLoginTime().getTime(): VciDateUtil.getNowTime());
}
/**
@@ -497,69 +682,6 @@
}
/**
- * 鍒涘缓璁稿彲鐨勪俊鎭�
- *
- * @param sessionInfo session鐨勪俊鎭�
- * @return 璁稿彲淇℃伅
- */
- @Override
- public TokenVO createToken(SessionInfo sessionInfo) {
- return createToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo);
- }
-
- /**
- * 鍒涘缓璁稿彲鐨勪俊鎭�
- * @param key token鍦╮edis涓殑key
- * @param sessionInfo session鐨勪俊鎭�
- * @return 璁稿彲淇℃伅
- */
- @Override
- public TokenVO createToken(String key, SessionInfo sessionInfo) {
- if(StringUtils.isBlank(sessionInfo.getToken())) {
- String token = Md5.md5(VciBaseUtil.getPk() + "_" + sessionInfo.getUserId());
- sessionInfo.setToken(token);
- }
- if(StringUtils.isBlank(key)){
- key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS;
- }
- refreshToken(key, sessionInfo);
- Map<String,Object> claimsMap = new HashMap<>();
- claimsMap.put(TokenKeyConstant.JWT_TOKEN_KEY,sessionInfo.getToken());
- claimsMap.put(TokenKeyConstant.JWT_USER_KEY,sessionInfo.getUserOid());
- claimsMap.put(TokenKeyConstant.JWT_USER_NAME_KEY,sessionInfo.getUserName());
- claimsMap.put(TokenKeyConstant.JWT_USER_CODE_KEY,sessionInfo.getUserId());
- TokenVO tokenVO = new TokenVO();
- tokenVO.setAccessToken(JwtUtils.createToken(claimsMap));
- tokenVO.setExpireTime(TokenKeyConstant.EXPIRATION);
- return tokenVO;
- }
-
- /**
- * 鍒锋柊token
- * @param sessionInfo session鐨勪俊鎭�
- */
- @Override
- public void refreshToken(SessionInfo sessionInfo) {
- refreshToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo);
- }
-
- /**
- * 鍒锋柊token
- * @param key token鍦╮edis涓殑key
- * @param sessionInfo session鐨勪俊鎭�
- */
- @Override
- public void refreshToken(String key, SessionInfo sessionInfo) {
- if(sessionInfo!=null && StringUtils.isNotBlank(sessionInfo.getToken())){
- if(StringUtils.isBlank(key)){
- key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS;
- }
- String redisKey = key + sessionInfo.getToken();
- redisService.setCacheObject(redisKey, sessionInfo, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES);
- }
- }
-
- /**
* 鑾峰彇鐧诲綍閿欒鐮�
* @param chkRes 骞冲彴鐧诲綍鏍¢獙缁撴灉
* @Return java.lang.String
@@ -569,7 +691,7 @@
switch(chkRes.state.value())
{
case 0:
- return "";
+ return UNKNOWN;
case 1:
return LOGIN_SUCCESS;
case 10:
--
Gitblit v1.9.3