From b6dee87c91bfdcb68fcc456c9a2ec46b2ed7cbe3 Mon Sep 17 00:00:00 2001 From: dangsn <dangsn@chicecm.com> Date: 星期二, 11 六月 2024 12:33:35 +0800 Subject: [PATCH] 登录和权限校验功能 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java | 101 ++++++-------------------------------------------- 1 files changed, 13 insertions(+), 88 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..5d8706a 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 @@ -19,10 +19,7 @@ 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; @@ -142,15 +139,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.鑾峰彇鐢ㄦ埛鐨勫璞�. @@ -308,10 +307,10 @@ loginResult.setSuccess(true); sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId())); - loginResult.setSessionInfo(sessionInfo); //娣诲姞鍒颁細璇濅俊鎭� - saveSessionInfo(sessionInfo); + TokenVO tokenVO = saveSessionInfo(sessionInfo); + loginResult.setTokenVO(tokenVO); return loginResult; } @@ -322,14 +321,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 +395,11 @@ * 淇濆瓨浼氳瘽淇℃伅 * @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); + return sessionForLogin.createToken(sessionInfo); } /** @@ -462,6 +449,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 +482,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