zoukankan      html  css  js  c++  java
  • 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); 来计算加盐后的密码值。
  • 相关阅读:
    1)BS和CS区别
    109)PHP与oracle网址
    8)对于带有 : 的语句
    将位数较多的数字看成是字符串
    7)杂项没整理
    css中的zoom的使用
    CSS布局一
    ul和ol的一些知识
    css中的display
    css中的content的使用
  • 原文地址:https://www.cnblogs.com/startcaft/p/7117565.html
Copyright © 2011-2022 走看看