在开发中运行定时任务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位传到后端,因此会导致输入正确的密码后仍然登录失败。