Shiro认证时的密码比对

在前面一节《Shiro在Web环境下集成Spring的大致工作流程》的最后一步中提到由Shiro完整密码比对。

那么具体是怎么工作的?

1,既然shiro会把密码来进行比对,当然会调用 UserNamePasswordkToken 中的 getPassword() 方法了。在该方法中打上断点,往前跟踪一下即可。
     

 

2,开启debug模式,跟踪发现 org.apache.shiro.authc.credential.SimpleCredentialsMatcher 类进行密码的比对
     

 

3,继续跟踪,发现我们自定义Realm的父类方法调用了 CrendebtialsMatcher组件 进行密码比对
     

 

CrendentialsMatcher组件(凭证匹配器)作用
     1,用来进行密码比对。
     2,用来对密码进行加密。
     3,shiro提供了该组件接口的很多实现类,用于不同类型的密码加密。
          常用的加密实现类为: HashedCrendentialsMatcher
     4,替换当前 Realm 的 crendentialsMatcher 属性,直接使用 HasedCrendentialsMatcher 对象,并设置加密算法即可。
 
结论:
     ①通过 AuthenticatingRealm 的 CrendentialsMatcher 属性来进行的密码的比对
     ②指定具体的 CrendentialsMatcher 接口的实现类来 设置加密算法,盐值和循环加密次数
     ③如果两个用户拥有相同的原始密码,那么加密后的数据也是一样的,这还是有点安全隐患的,所以 盐值最好设置为一个用户的唯一值(一般采用用户名)。
     ④在自定义Realm的认证方法(doAuthenticationInfo方法),返回的SimpeAuthenticationInfo对象时,需要采用带有ByteSource参数的构造函数来构建对象。
          ByteSource对象可以采用 ByteSource.Util.byte(String UserID)获取;
     ⑤使用 new SimpleHash(hashAlgorithmName,salt,hashIterations); 来计算加盐后的密码值。
posted on 2017-07-04 17:12 凯少 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/startcaft/p/7117565.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值