一.密码的比对
(1.1) 按住UsernamePasswordToken到源代码里,设置断点,进行调试.如下所示:
(1.2)调试
(1.3)调试CredentialsMatcher接口
选中CredentialsMatcher接口,按住Ctrl+T能查看到有很多加密的方式
总结:
通过AuthenticatingRealm 的credentialsMatcher属性来进行密码比对哦!
doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info);
二.密码的MD5加密
2.1.如何把一个字符串加密为MD5
并设置加密算法就ok!
application.xml配置文件修改:
ShiroRealm类中测试
将原来的密码修改成这个加密后的值哦!
运行也是Ok的!
三.密码的MD5盐值加密
3.1.为何用MD5盐值加密?
由于两个原始密码相同,加密后也是一样的,那么能否加密后的值不一样呢!3.2.如何做:
(a)在doGetAuthenticationInfo方法返回值创建SimpleAuthenticationInfo对象的时候,
需要使用 SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName)构造器.
(b)使用ByteSource.Util.bytes()来计算盐值
(c)盐值需要唯一:一般使用随机数字符串或userid
(d)使用new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations);
来计算盐值加密后的密码的值
注意:使用ByteSource.Util.bytes()来计算盐值
.修改ShiroRealm类
运行:
(1)用户mike/admin,密码aaa登录ok!
(2)用户your,密码aaa登录no!