liujie
2026-07-10 bedff910eb2394a8ce68762a8f3a413d81187ac1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -60,6 +60,18 @@
    @Autowired
    private TAppUserService appUserService;
    public LoginUser loginByTrustedUsername(String username, String loginSource, String middlePlatformToken)
    {
        loginUsernamePreCheck(username);
        SysUser user = validateLocalUser(username);
        LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
        loginUser.setLoginSource(loginSource);
        loginUser.setMiddlePlatformToken(middlePlatformToken);
        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
        recordLoginInfo(loginUser.getUserId());
        return loginUser;
    }
    /**
     * 登录验证
     * 
@@ -74,6 +86,11 @@
        // 验证码校验
        validateCaptcha(username, code, uuid);
        // 登录前置校验
        return loginWithoutCaptcha(username, password);
    }
    public LoginUser loginWithoutCaptcha(String username, String password)
    {
        loginPreCheck(username, password);
        // 用户验证
        Authentication authentication = null;
@@ -233,6 +250,43 @@
     * @param uuid 唯一标识
     * @return 结果
     */
    private void loginUsernamePreCheck(String username)
    {
        if (StringUtils.isEmpty(username))
        {
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null")));
            throw new UserNotExistsException();
        }
        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
        {
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
            throw new UserPasswordNotMatchException();
        }
        String blackStr = configService.selectConfigByKey("sys.login.blackIPList");
        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
        {
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked")));
            throw new BlackListException();
        }
    }
    private SysUser validateLocalUser(String username)
    {
        SysUser user = userService.selectUserByUserName(username);
        if (StringUtils.isNull(user)){
            log.info("登录用户:{} 不存在.", username);
            throw new ServiceException(MessageUtils.message("user.not.exists"));
        } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
            log.info("登录用户:{} 已被删除.", username);
            throw new ServiceException(MessageUtils.message("user.password.delete"));
        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
            log.info("登录用户:{} 已被停用.", username);
            throw new ServiceException(MessageUtils.message("user.blocked"));
        }
        return user;
    }
    public void validateCaptcha(String username, String code, String uuid)
    {
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");