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