wangting
2024-06-17 898c6142dfff5c0aaf091d1a5f287a427b175e9c
Merge remote-tracking branch 'origin/master'
已修改12个文件
已删除1个文件
325 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/RequestClientInfo.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/constant/FrameWorkBusLangCodeConstant.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/initTask/VciWebInitTaskComponent.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages_zh_CN.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java
@@ -128,6 +128,9 @@
                        sendErrorMsg(response,msg,2);
                        return false;
                    }else{
                        //初始化平台的token
                        sessionForLoginI.initInvocationInfo(sessionInfo);
                        String systemPrivateToken = request.getHeader(TokenKeyConstant.SYSTEM_PRIVATE_KEY);
                        try {
                            if (sessionForLoginI.checkRequestRights(request, systemPrivateToken, sessionInfo, handler)) {
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java
@@ -97,4 +97,10 @@
     * @param sessionInfo session的信息
     */
    void refreshToken(String key, SessionInfo sessionInfo);
    /**
     * å°†token放入平台中
     * @param sessionInfo
     */
    void initInvocationInfo(SessionInfo sessionInfo);
}
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/RequestClientInfo.java
@@ -51,6 +51,31 @@
     */
    private String ssoToken;
    /**
     * æ“ä½œç³»ç»Ÿ
     */
    private String osName;
    /**
     * æ“ä½œç³»ç»Ÿç”¨æˆ·
     */
    private String osUser;
    /**
     * æœºå™¨å
     */
    private String machine;
    /**
     * æ“ä½œç³»ç»Ÿè¯­è¨€
     */
    private String language;
    /**
     * æ“ä½œç³»ç»Ÿè®¾ç½®çš„国家
     */
    private String country;
    public String getRequestType() {
        return requestType;
    }
@@ -115,6 +140,46 @@
        this.ssoToken = ssoToken;
    }
    public String getOsName() {
        return osName;
    }
    public void setOsName(String osName) {
        this.osName = osName;
    }
    public String getOsUser() {
        return osUser;
    }
    public void setOsUser(String osUser) {
        this.osUser = osUser;
    }
    public String getMachine() {
        return machine;
    }
    public void setMachine(String machine) {
        this.machine = machine;
    }
    public String getLanguage() {
        return language;
    }
    public void setLanguage(String language) {
        this.language = language;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    @Override
    public String toString() {
        return "RequestClientInfo{" +
@@ -126,6 +191,11 @@
                ", sso=" + sso +
                ", ssoSystemName='" + ssoSystemName + '\'' +
                ", ssoToken='" + ssoToken + '\'' +
                ", osName='" + osName + '\'' +
                ", osUser='" + osUser + '\'' +
                ", machine='" + machine + '\'' +
                ", language='" + language + '\'' +
                ", country='" + country + '\'' +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java
@@ -29,6 +29,10 @@
     */
    private String deptOid;
    /**
     * æ‰€å±žéƒ¨é—¨ç¼–号
     */
    private String deptNum;
    /**
     * æ‰€å±žéƒ¨é—¨åç§°
     */
    private String deptName;
@@ -624,12 +628,21 @@
        this.lastLoginTime = lastLoginTime;
    }
    public String getDeptNum() {
        return deptNum;
    }
    public void setDeptNum(String deptNum) {
        this.deptNum = deptNum;
    }
    @Override
    public String toString() {
        return "SessionInfo{" +
                "orgsOid='" + orgsOid + '\'' +
                ", orgsName='" + orgsName + '\'' +
                ", deptOid='" + deptOid + '\'' +
                ", deptNum='" + deptNum + '\'' +
                ", deptName='" + deptName + '\'' +
                ", userOid='" + userOid + '\'' +
                ", userId='" + userId + '\'' +
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java
@@ -1,6 +1,8 @@
package com.vci.frameworkcore.compatibility.impl;
import com.vci.client.mw.ClientSessionUtility;
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.InvocationInfo;
import com.vci.corba.omd.data.AttributeValue;
import com.vci.starter.web.annotation.log.VciUnLog;
import com.vci.starter.web.constant.TokenKeyConstant;
@@ -342,4 +344,16 @@
        String userToken = JwtUtils.getUserToken(jwtToken);
        return TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS + userToken;
    }
    /**
     * å°†token放入平台中
     *
     * @param sessionInfo
     */
    @Override
    public void initInvocationInfo(SessionInfo sessionInfo) {
        InvocationInfo vcii = new InvocationInfo();
        vcii.setToken(sessionInfo.getToken());
        ClientSessionUtility.setInvocationInThread(vcii);
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/constant/FrameWorkBusLangCodeConstant.java
@@ -540,4 +540,9 @@
     * å¯†ç ç­–略已经修改,需修改账号密码
     */
    public static final String PASSWORD_POLICY_UPDATED = "passwordPolicyUpdated";
    /**
     * token值为空
     */
    public static final String TOKEN_EMPTY = "tokenEmpty";
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java
@@ -17,7 +17,6 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@@ -27,7 +26,10 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.security.Principal;
import java.util.*;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
 * ç™»å½•控制器
@@ -256,6 +258,14 @@
                    clientInfo.setRequestType("browser");
                }
            }
            Locale loc = Locale.getDefault();
            clientInfo.setCountry(loc.getCountry());
            clientInfo.setLanguage(loc.toLanguageTag());
            Map<String,String> map = System.getenv();
            clientInfo.setMachine(map.get("COMPUTERNAME"));
            clientInfo.setOsUser(map.get("USERNAME"));
        }
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/initTask/VciWebInitTaskComponent.java
@@ -12,7 +12,6 @@
import com.vci.starter.web.annotation.config.VciConfigModule;
import com.vci.starter.web.enumpck.SessionStorageTypeEnum;
import com.vci.starter.web.enumpck.UserSecretEnum;
import com.vci.starter.web.interceptor.VciSessionForLoginI;
import com.vci.starter.web.pagemodel.SessionInfo;
import com.vci.starter.web.properties.VciSessionProperties;
import com.vci.starter.web.util.ApplicationContextProvider;
@@ -22,10 +21,7 @@
import com.vci.web.properties.WebProperties;
import com.vci.web.service.OsAttributeServiceI;
import com.vci.web.service.VciMdServiceI;
import com.vci.web.service.WebSecretServiceI;
import com.vci.web.service.impl.UIEngineServiceImpl;
import com.vci.web.service.impl.WebContextInfoFetcher;
import com.vci.web.service.impl.WebInitServiceImpl;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
@@ -37,16 +33,14 @@
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ResourceUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
@@ -58,29 +52,16 @@
@Component
public class VciWebInitTaskComponent implements ApplicationRunner {
    /**
     * æ—¥å¿—对象
     */
    private Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * åˆå§‹åŒ–的服务
     */
    @Autowired
    private WebInitServiceImpl initService;
    /**
     * æ˜¯å¦å…¼å®¹
     */
    @Value("${user-table-compatibility:}")
    private String compatibility;
    /**
     * ä¸Šä¸‹æ–‡æ³¨å†Œ
     */
    @Autowired
    private WebContextInfoFetcher contextInfoFetcher;
    /**
     * é…ç½®å¯¹è±¡
@@ -101,11 +82,6 @@
    private VciSessionProperties sessionProperties;
    /**
     * ä¼šè¯å¤„理
     */
    @Autowired
    private VciSessionForLoginI sessionForLogin;
    /**
     * å¼•入兼容的配置
     */
    @Autowired(required = false)
@@ -122,12 +98,6 @@
     */
    @Autowired
    private VciMdServiceI mdService;
    /**
     * å¯†çº§æœåŠ¡
     */
    @Autowired
    private WebSecretServiceI secretService;
    /**
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java
@@ -1,8 +1,12 @@
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;
@@ -13,7 +17,6 @@
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;
@@ -30,16 +33,14 @@
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.Map;
import java.util.concurrent.TimeUnit;
import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.*;
@@ -171,16 +172,28 @@
        }
        //4、调用平台登录接口,进行登录
        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;
        }
@@ -283,10 +296,25 @@
        user.setPwdWrongCount(0);
        SessionInfo sessionInfo = new SessionInfo();
        sessionInfo.setToken(token);
        //初始化平台的token
        sessionForLogin.initInvocationInfo(sessionInfo);
        //拷贝用户的新到session会话中
        copyUser2SessionInfo(user, sessionInfo, userDTO.getLangCode());
        //拷贝请求信息到session会话中
        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);
@@ -305,14 +333,21 @@
            sessionInfo.setFunctionOids(new ArrayList());
        }*/
        loginResult.setSuccess(true);
        sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId()));
        //添加到会话信息
        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;
    }
    /**
@@ -399,6 +434,7 @@
        if(sessionForLogin == null){
            throw new VciBaseException("没有配置会话存储的服务");
        }
        WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo);
        return sessionForLogin.createToken(sessionInfo);
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java
ÎļþÒÑɾ³ý
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/PlatformClientUtil.java
@@ -1,6 +1,6 @@
package com.vci.web.util;
import com.vci.client.common.providers.ClientServiceProvider;
import com.vci.client.common.providers.WebServiceProvider;
import com.vci.corba.bofactory.BOFactoryServicePrx;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.FrameworkServicePrx;
@@ -87,7 +87,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public BOFactoryServicePrx getBOFactoryService(){
        return ClientServiceProvider.getBOFService();
        return WebServiceProvider.getBOFService();
   }
    /**
@@ -95,7 +95,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public WorkflowServicePrx getWorkflowService(){
        return ClientServiceProvider.getWFService();
        return WebServiceProvider.getWFService();
    }
    /**
@@ -103,7 +103,7 @@
     * @Return æœåŠ¡çš„å¯¹è±¡
     */
    public FrameworkServicePrx getFrameworkService(){
        return ClientServiceProvider.getFrameService();
        return WebServiceProvider.getFrameService();
    }
    /**
@@ -111,7 +111,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public StatePoolServicePrx getStatePoolService() throws PLException {
        return ClientServiceProvider.getOMDService().getStateService();
        return WebServiceProvider.getOMDService().getStateService();
   }
    /**
@@ -119,7 +119,7 @@
     * @return ç”Ÿå‘½å‘¨æœŸçš„æœåŠ¡å¯¹è±¡
     */
    public LifeCycleServicePrx getLifeCycleService() throws PLException {
        return ClientServiceProvider.getOMDService().getLifeCycleService();
        return WebServiceProvider.getOMDService().getLifeCycleService();
}
    /**
@@ -127,7 +127,7 @@
     * @return æžšä¸¾çš„æœåŠ¡å¯¹è±¡
     */
    public EnumServicePrx getEnumService() throws PLException {
        return ClientServiceProvider.getOMDService().getEnumService();
        return WebServiceProvider.getOMDService().getEnumService();
    }
    /**
@@ -135,7 +135,7 @@
     * @return ç‰ˆæœ¬è§„则的服务
     */
    public VersionRuleServicePrx getVersionService() throws PLException {
        return ClientServiceProvider.getOMDService().getVerRuleService();
        return WebServiceProvider.getOMDService().getVerRuleService();
    }
    /**
@@ -143,7 +143,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public AttPoolServicePrx getAttributeService() throws PLException {
        return ClientServiceProvider.getOMDService().getAttributeService();
        return WebServiceProvider.getOMDService().getAttributeService();
    }
    /**
@@ -151,7 +151,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public BTMServicePrx getBtmService() throws PLException {
        return ClientServiceProvider.getOMDService().getBTMService();
        return WebServiceProvider.getOMDService().getBTMService();
    }
    /**
@@ -159,7 +159,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public LinkTypeServicePrx getLinkTypeService() throws PLException {
        return ClientServiceProvider.getOMDService().getLinkTypeService();
        return WebServiceProvider.getOMDService().getLinkTypeService();
    }
    /**
@@ -167,7 +167,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public PortalServicePrx getPortalService(){
        return ClientServiceProvider.getUIService();
        return WebServiceProvider.getUIService();
    }
    /**
@@ -175,7 +175,7 @@
     * @return æœåŠ¡çš„å¯¹è±¡
     */
    public ObjectQueryServicePrx getQueryService(){
        return ClientServiceProvider.getOQService();
        return WebServiceProvider.getOQService();
    }
    /**
@@ -184,7 +184,7 @@
     * @return å·æœåŠ¡çš„çš„å¯¹è±¡
     */
    public VolumeServicePrx getVolumeService(String volumeName){
        return ClientServiceProvider.getVolumeService(volumeName);
        return WebServiceProvider.getVolumeService(volumeName);
    }
    /**
@@ -192,7 +192,7 @@
     * @return å·æœåŠ¡çš„çš„å¯¹è±¡
     */
    public QTDServicePrx getQTDService() throws PLException {
        return ClientServiceProvider.getOMDService().getQTDService();
        return WebServiceProvider.getOMDService().getQTDService();
    }
    /**
@@ -202,7 +202,7 @@
     * @return å·æœåŠ¡çš„çš„å¯¹è±¡
     */
    public String[][] getSqlQueryService(String sql, AttributeValue[] attrVals) throws PLException {
        return ClientServiceProvider.getBOFService().getSqlQueryResult(sql, attrVals);
        return WebServiceProvider.getBOFService().getSqlQueryResult(sql, attrVals);
    }
    /**
@@ -210,7 +210,7 @@
     * @Return com.vci.corba.log.LogServicePrx
     */
    public LogServicePrx getLogService(){
        return ClientServiceProvider.getLogService();
        return WebServiceProvider.getLogService();
    }
    /**
@@ -218,7 +218,7 @@
     * @return
     */
    public PortalServicePrx getUIService(){
        return ClientServiceProvider.getUIService();
        return WebServiceProvider.getUIService();
    }
    /**
@@ -226,6 +226,6 @@
     * @return
     */
    public BOFactoryServicePrx getBOFService() {
        return ClientServiceProvider.getBOFService();
        return WebServiceProvider.getBOFService();
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages.properties
@@ -76,6 +76,7 @@
passwordInit=\u8D26\u53F7\u5BC6\u7801\u4E3A\u521D\u59CB\u5BC6\u7801\uFF0C\u9700\u8981\u4FEE\u6539\u540E\u624D\u80FD\u767B\u5F55
passwordExpire=\u5BC6\u7801\u5DF2\u8FC7\u671F
passwordPolicyUpdated=\u5BC6\u7801\u7B56\u7565\u5DF2\u7ECF\u4FEE\u6539\uFF0C\u9700\u4FEE\u6539\u8D26\u53F7\u5BC6\u7801
tokenEmpty=token\u4E3A\u7A7A
#########\u7CFB\u7EDF\u8D44\u6E90\u76F8\u5173######
com.vci.web.menu.noHasFunction= {0}\u6CA1\u6709\u4EFB\u4F55\u7684\u6743\u9650
Source/plt-web/plt-web-parent/plt-web/src/main/resources/i18n/messages_zh_CN.properties
@@ -76,6 +76,7 @@
passwordInit=\u8D26\u53F7\u5BC6\u7801\u4E3A\u521D\u59CB\u5BC6\u7801\uFF0C\u9700\u8981\u4FEE\u6539\u540E\u624D\u80FD\u767B\u5F55
passwordExpire=\u5BC6\u7801\u5DF2\u8FC7\u671F
passwordPolicyUpdated=\u5BC6\u7801\u7B56\u7565\u5DF2\u7ECF\u4FEE\u6539\uFF0C\u9700\u4FEE\u6539\u8D26\u53F7\u5BC6\u7801
tokenEmpty=token\u4E3A\u7A7A
#########\u7CFB\u7EDF\u8D44\u6E90\u76F8\u5173######
com.vci.web.menu.noHasFunction= {0}\u6CA1\u6709\u4EFB\u4F55\u7684\u6743\u9650