From 8a857fe1b0b69dafbdaa15b45edab03a2c3bcdb2 Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期二, 09 七月 2024 09:52:47 +0800 Subject: [PATCH] 成员管理表格查询 增删改 分配成员 统计 下载导入模板 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java | 160 ++++++++++++++++++++-------------------------------- 1 files changed, 62 insertions(+), 98 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..aba5f04 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,28 +1,30 @@ package com.vci.web.service.impl; -import com.vci.client.logon.base.LogonHandler; +import com.vci.client.mw.ClientSessionUtility; +import com.vci.corba.common.PLException; +import com.vci.corba.common.data.InvocationInfo; +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.SmUserQueryServiceI; +import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum; +import com.vci.frameworkcore.pagemodel.SmFunctionVO; import com.vci.frameworkcore.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.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.starter.web.util.*; import com.vci.web.bo.LoginResultBO; import com.vci.web.constant.CacheNameConstant; import com.vci.web.dto.LoginUserDTO; @@ -33,16 +35,15 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.concurrent.TimeUnit; import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*; @@ -142,15 +143,17 @@ } //闇�瑕佺湅鐪嬫槸鍚﹀凡缁忕櫥褰曚簡 - String loginKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_LOGIN, userDTO.getUserId()); - if(redisService.hasKey(loginKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){ + 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); } //2.鑾峰彇鐢ㄦ埛鐨勫璞�. @@ -172,16 +175,28 @@ } //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; } @@ -284,10 +299,25 @@ 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); @@ -306,14 +336,21 @@ sessionInfo.setFunctionOids(new ArrayList()); }*/ - loginResult.setSuccess(true); - sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId())); - loginResult.setSessionInfo(sessionInfo); - //娣诲姞鍒颁細璇濅俊鎭� - 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,14 +359,7 @@ * @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); } @@ -403,16 +433,12 @@ * 淇濆瓨浼氳瘽淇℃伅 * @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 +488,7 @@ sessionInfo.setRtxNo(user.getRtxNo()); sessionInfo.setIMId(user.getIMNo()); sessionInfo.setPortalId(user.getId()); + sessionInfo.setLastLoginTime(user.getLastLoginTime()!=null?user.getLastLoginTime().getTime(): VciDateUtil.getNowTime()); } /** @@ -494,69 +521,6 @@ */ private void updateUserForLoginSuccess(String userOid){ userQueryService.updateUserLoginTime(userOid); - } - - /** - * 鍒涘缓璁稿彲鐨勪俊鎭� - * - * @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); - } } /** -- Gitblit v1.9.3