Bootstrap

关于xxl-job-admin使用中指定账号密码时的坑

在开发中运行定时任务xxl-job-admin时,想改变console控制台登录的账号密码,只能通过修改properties文件中绑定的数据库中xxl_user表中的数据。
xxl-job在初始化数据的时候会自动插入默认admin,123456的账号。
在这里插入图片描述
xxljob使用的登录校验是md5源码如下:

  public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember){

        // param
        if (username==null || username.trim().length()==0 || password==null || password.trim().length()==0){
            return new ReturnT<String>(500, I18nUtil.getString("login_param_empty"));
        }

        // valid passowrd
        XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
        if (xxlJobUser == null) {
            return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
        }
        String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
        if (!passwordMd5.equals(xxlJobUser.getPassword())) {
            return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
        }

        String loginToken = makeToken(xxlJobUser);

        // do login
        CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
        return ReturnT.SUCCESS;
    }

由于md5是摘要算法,不可逆向的,每次登录时需要把密码通过相同的md5加密后对比数据库是否一致,所以想修改密码只能修改数据库字段值,将新密码通过DigestUtils.md5DigestAsHex(password.getBytes()) 加密后然后修改到数据库。

  • 坑来了:
    如果修改的新密码在加密前超过18位的话,仍然会登录失败,原因是xxljob服务前端对输入框输入的密码做了截取,只保留了18位传到后端,因此会导致输入正确的密码后仍然登录失败。
;