From d0ae279ff3b83358d1c07f4481a041c4ad335026 Mon Sep 17 00:00:00 2001
From: dangsn <dangsn@chicecm.com>
Date: 星期二, 03 十二月 2024 11:57:38 +0800
Subject: [PATCH] 提取业务系统使用的功能,独立出一个单独的模块

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java |  266 +++-------------------------------------------------
 1 files changed, 19 insertions(+), 247 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/OsLoginServiceImpl.java
similarity index 61%
rename from Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
rename to Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java
index 8bc2aa7..9e88c5c 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/OsLoginServiceImpl.java
@@ -1,21 +1,17 @@
 package com.vci.web.service.impl;
 
+import com.vci.bo.LoginResultBO;
+import com.vci.constant.CacheNameConstant;
 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.SmPwdStrategyQueryServiceI;
-import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
-import com.vci.frameworkcore.enumpck.ResourceControlTypeEnum;
-import com.vci.frameworkcore.lcstatuspck.FrameworkDataLCStatus;
+import com.vci.dto.LoginUserDTO;
+import com.vci.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;
@@ -25,15 +21,21 @@
 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.bo.LoginResultBO;
-import com.vci.constant.CacheNameConstant;
-import com.vci.dto.LoginUserDTO;
-import com.vci.web.properties.WebProperties;
 import com.vci.starter.web.redis.RedisService;
-import com.vci.web.service.LoginServiceI;
-import com.vci.web.util.Func;
+import com.vci.starter.web.util.ApplicationContextProvider;
+import com.vci.starter.web.util.Lcm.Func;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.util.VciDateUtil;
+import com.vci.starter.web.util.WebThreadLocalUtil;
+import com.vci.web.ajaxTask.SmUserUnLockTask;
+import com.vci.web.ajaxTask.SmUserUnLockTaskManager;
+import com.vci.web.enumpck.ResourceControlTypeEnum;
+import com.vci.web.properties.VciSecurityManageProperties;
+import com.vci.web.properties.WebProperties;
+import com.vci.web.service.ISmFunctionQueryService;
+import com.vci.web.service.OsLoginServiceI;
+import com.vci.web.service.SmPwdStrategyQueryServiceI;
+import com.vci.web.service.SmUserQueryServiceI;
 import com.vci.web.util.PlatformClientUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -55,7 +57,7 @@
  * @date 2020/1/29
  */
 @Service
-public class LoginServiceImpl implements LoginServiceI {
+public class OsLoginServiceImpl implements OsLoginServiceI {
 
     /**
      * 鏃ュ織
@@ -286,223 +288,6 @@
         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);
-            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
-            return loginResult;
-        }
-
-        //3銆佸垽鏂瘑鐮佹槸鍚︽纭�
-        if (checkPassword) {
-            boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getName());
-            if (!passwordIsEqual) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("{}瀵嗙爜涓嶆纭�", user.getId());
-                }
-            }
-        }
-
-        //4銆佽皟鐢ㄥ钩鍙扮櫥褰曟帴鍙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 {
-            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())) {
-            loginResult.setFailCode(USER_IS_DISABLED);
-            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
-            return loginResult;
-        }
-        if (userQueryService.checkUserLock(user, user.getPwdWrongCount())) {
-            loginResult.setFailCode(USER_IS_LOCK);
-            loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
-            return loginResult;
-        }
-
-        //濡傛灉鐢ㄦ埛鐨勫け鏁堟棩鏈熷凡缁忚秴杩囦簡褰撳墠鏃堕棿锛屼笉鑳界櫥褰�
-        //鍙湁鏂板钩鍙扮殑鐢ㄦ埛鎵嶅垽鏂け鏁�
-        /*if (user.getDisabledate() != null) {
-            //2021鐗堟湰鎵嶆湁杩欎釜灞炴�х殑鍊硷紝褰撳墠杩欎釜娌℃湁杩欎釜鍊�
-            Date disableDate = VciDateUtil.addOrSubDate(user.getDisabledate(), Calendar.DATE, 1);
-            if (disableDate != null && disableDate.getTime() < System.currentTimeMillis()) {
-                loginResult.setFailCode(USER_MORE_THAN_DISABLE_DATE);
-                loginResult.setFailMsgArray(new String[]{userDTO.getUserId()});
-                return loginResult;
-            }
-        }*/
-        //褰撳墠鐢ㄦ埛娌℃湁閰嶇疆灏辨煡璇㈤粯璁ょ殑瀵嗙爜绛栫暐
-        SmPasswordStrategyVO passwordStrategyVO = pwdStrategyQueryService.getPasswordStrategyVOByUserOid(user.getOid());
-        if (checkPassword) {
-            //鍓嶇闇�瑕佸厛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);
-            } catch (Throwable e) {
-                if (logger.isErrorEnabled()) {
-                    logger.error("鑾峰彇褰撳墠鏃ユ湡", e);
-                }
-            }
-            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());
-                    if (inValidDay.getTime() <= (currentDay).getTime()) {
-                        loginResult.setMustChangePassword(true);
-                    }
-                }
-                if (!loginResult.isMustChangePassword()) {
-                    if (VciDateUtil.addOrSubDate(inValidDay, Calendar.DATE, -(passwordStrategyVO.getRemindDay())).getTime()
-                            <= (currentDay).getTime()) {
-                        //鎮ㄧ殑瀵嗙爜杩樻湁{0}澶╄繃鏈燂紝璇峰強鏃朵慨鏀瑰瘑鐮�
-                        long remainDay = VciDateUtil.getDaySub(inValidDay, currentDay);
-                        loginResult.setPasswordInfo(MessageFormat.format(PASSWORD_REMAIN_DAY, new String[]{String.valueOf(remainDay)}));
-                    }
-                }
-            }
-        }
-
-        //璇存槑瀵嗙爜姝g‘鐨�
-        if (logger.isDebugEnabled()) {
-            logger.debug("{}鐨勫瘑鐮佹纭�", user.getId());
-        }
-        user.setLastLoginTime(new Date());
-        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);
-         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();
@@ -519,19 +304,6 @@
      */
     private SmUserVO getUserByUserId(String userId) {
         return userQueryService.getUserByUserId(userId);
-    }
-
-    /**
-     * 鍗曠偣鐧诲綍
-     *
-     * @param userDTO    鐧诲綍淇℃伅
-     * @param clientInfo 璇锋眰鐨勫鎴风鐨勪俊鎭�
-     * @return 鐧诲綍鐨勭粨鏋滃璞�
-     * @throws VciBaseException 鐧诲綍澶辫触鐨勬椂鍊欐姏鍑哄紓甯�
-     */
-    @Override
-    public LoginResultBO singleLogin(LoginUserDTO userDTO, RequestClientInfo clientInfo) throws Exception {
-        return login(userDTO,clientInfo,false);
     }
 
     /**

--
Gitblit v1.9.3