shiro中的密码是如何验证是否匹配的

在我们登陆的时候传递到后台的密码是如何与后台已经加密的密码匹配的
首先在添加账号密码的时候,对密码加密使用如下

String salt= System.currentTimeMillis()+accounts.gettPId()+"";
        accounts.setSalt(salt);//随机加密盐
        String password = new SimpleHash("MD5", accounts.getPassword(), accounts.getSalt(), 2).toString();

这里使用随机的数字生成一个加密盐,然后使用这个加密盐使用MD5的方式加密密码,应为shiro中使用的是md5的方式进行加密解密(当然可以配置加密解密方式),所以在这里要使用MD5的方式加密。
在登陆的时候页面传递的密码是明文的,也就是没有加密过的密码,直接使用如下方式生成token,其中会自动将密码使用设置的加密方式进行加密。

 UsernamePasswordToken token = new UsernamePasswordToken(login_name,password);

然后使用 login方法进行登陆,

  Subject sub = SecurityUtils.getSubject();
  sub.login(token)

执行这个方法的时候shiro就会直接到我们自己创建的MyRealm类中寻找doGetAuthenticationInfo方法,在这个方法里我们使用如下方式来验证数据库中的密码和我们输入的是否相同

 ByteSource credentialsSalt = ByteSource.Util.bytes(user.getSalt());//上面添加账号时候生成的加密盐
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(accountName,user.getPassword(),credentialsSalt, getName());

这里shiro会直接将密码和前面生成token中的密码进行匹配,如果匹配成功则登陆成功,不成功则报错(应为我们使用的是shiro的login方法)

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值