公司旧的javaweb项目需要集成shiro权限框架,但是需要原来的密码。
首先在ShiroDbRealm类中的doGetAuthenticationInfo方法中返回
return new SimpleAuthenticationInfo(shiroUser, user.getAdm_login_pwd().toCharArray(),
ShiroByteSource.of(ConstantUtil.C_SYS_MD5KEY), getName());
其中
ConstantUtil.C_SYS_MD5KEY为密码盐,我这边存储的是变量,也可以从数据库获取。
在RetryLimitCredentialsMatcher类中doCredentialsMatch方法,如下:
@Override
public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
Object accountCredential = getCredentials(info);//数据库中获取的密码,密文
String pwd = String.valueOf(token.getPassword());//页面传过来的密码
//自定义加密算法算出的密码值,密文
String inputCredential = Md5Util.getMd5(pwd, ConstantUtil.C_SYS_MD5KEY, ConstantUtil.C_SYS_CHARSET).toUpperCase();
if(pwd.length() == 32){
return equals(accountCredential.toString().toUpperCase(), inputCredential);
}
return equals(accountCredential.toString().toUpperCase(), inputCredential);
}