为了账号安全,请及时绑定邮箱和手机立即绑定

使用了 HashedCredentialsMatcher 后密码并没有加密?

不太清楚有没有碰到密码没有真正加密的问题...吾辈在 CustomRealm 中对传进来的密码进行了断点查看发现并没有加密(还是明文), 老师的课程中没有对比密码, 不知道会不会有没有问题呢? (」゜ロ゜)」

https://img1.sycdn.imooc.com//5ae277a7000165c407760315.jpg

查看传入的 token 的值

https://img1.sycdn.imooc.com//5ae277ea0001eba114650259.jpg

正在回答

4 回答

同学你好,你配置的只是shiro验证的加密规则,在你保存的时候并没有去加密,所以数据库里的密码还是明文,你在保存的方法那里设置一下加密算法名字,加密次数,盐值即可。例子如下:

public void insert(User user1) {
  //对用户密码进行加盐处理
  String salt = RandomStringUtils.randomAlphabetic(20);
  user.setPassword(new SimpleHash("MD5",user1.getPassword(),salt,20).toHex());
  user1.setPassword(new Sha256Hash(user1.getPassword(),salt,20).toHex());
  user1.setSalt(salt);
  this.save(user1);
}


0 回复 有任何疑惑可以回复我~

你看的密码没有加密是正确的,

HashedCredentialsMatcher中的
public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
    Object tokenHashedCredentials = hashProvidedCredentials(token, info);
    Object accountCredentials = getCredentials(info);
    return equals(tokenHashedCredentials, accountCredentials);
}
方法会对传过来的明文密码按照HashedCredentialsMatcher对象的设置进行加密,然后与数据库里面的加密密码进行比对的


0 回复 有任何疑惑可以回复我~

我也是。。。。。。。没有跟视频里一样,根本没散列。。

0 回复 有任何疑惑可以回复我~

你的自定义realm的doGetAuthenticationInfo少了一行代码, 指定salt盐值。

如下:

SimpleAuthenticationInfo saf = new SimpleAuthenticationInfo(username, user.getPassword(), this.getName());
saf.setCredentialsSalt(ByteSource.Util.bytes(SALT));
return saf;
0 回复 有任何疑惑可以回复我~
#1

hodge

没有+盐值导致的? 开始在设置realm的时候指定盐值(获取到的盐值)放进去并返回是不是就不用你现在写的这一步?
2019-09-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

使用了 HashedCredentialsMatcher 后密码并没有加密?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号